PostgreSQLを使用してC#デスクトップアプリケーションを強化しています。PgAdminクエリアナライザを使用してテキスト列を特殊文字(著作権商標など)で更新すると、完全に機能します。
update table1 set column1='value with special character ©' where column2=1
C#アプリケーションからこれと同じクエリを使用すると、エラーがスローされます。
エンコーディングに無効なバイトシーケンス
この問題を調査した結果、.NET文字列がUTF-16Unicodeエンコーディングを使用していることがわかりました。
検討:
string sourcetext = "value with special character ©";
// Convert a string to utf-8 bytes.
byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(sourcetext);
// Convert utf-8 bytes to a string.
string desttext = System.Text.Encoding.UTF8.GetString(utf8Bytes);
ここでの問題は、sourcetext
とdesttext
がUTF-16文字列としてエンコードされていることです。合格desttext
しても、例外が発生します。
私も成功せずに次のことを試しました:
Encoder.GetString, BitConverter.GetString
編集:私もこれを試しましたが、役に立ちません:
unsafe
{
String utfeightstring = null;
string sourcetext = "value with special character ©";
Console.WriteLine(sourcetext);
// Convert a string to utf-8 bytes.
sbyte[] utf8Chars = (sbyte[]) (Array) System.Text.Encoding.UTF8.GetBytes(sourcetext);
UTF8Encoding encoding = new UTF8Encoding(true, true);
// Instruct the Garbage Collector not to move the memory
fixed (sbyte* pUtf8Chars = utf8Chars)
{
utfeightstring = new String(pUtf8Chars, 0, utf8Chars.Length, encoding);
}
Console.WriteLine("The UTF8 String is " + utfeightstring);
}
.NETにUTF-8でエンコードされた文字列の格納をサポートするデータ型はありますか?この状況を処理する別の方法はありますか?