170

サード パーティのアプリから受け取った文字列があり、Windows Surface で C# を使用して任意の言語で正しく表示したいと考えています。

エンコーディングが正しくないため、文字列の一部はスペイン語で次のようになります。

アクション

一方、次のようになります。

アクション

この質問に対する回答によると: How to know string encoding in C#、受信しているエンコーディングは既に UTF-8 に対応しているはずですが、Encoding.Default (おそらく ANSI?) で読み取られます。

この文字列を実際の UTF-8 に変換しようとしていますが、問題の 1 つは、おそらく Windows サーフェス API に制限されているため、Encoding クラスのサブセット (UTF8 および Unicode プロパティのみ) しか表示できないことです。

インターネットで見つけたいくつかのスニペットを試してみましたが、東洋の言語 (つまり韓国語) ではこれまで成功したものはありませんでした。一例を以下に示します。

var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);     

また、文字列をバイト配列に抽出してから、UTF8.GetString を使用してみました。

byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
    char ch = myString[ix];
    myByteArray[ix] = (byte) ch;
}

myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);

私が試すことができる他のアイデアはありますか?

4

7 に答える 7

295

ご存知のように、文字列は次のようにEncoding.Default単純に使用できます。

byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);

覚えておく必要があるかもしれないもう 1 つのこと: Console.WriteLine を使用して文字列を出力している場合は、次のようにも記述する必要がありますConsole.OutputEncoding = System.Text.Encoding.UTF8;!!! または、すべての utf8 文字列が gbk として出力されます...

于 2012-12-27T16:15:30.617 に答える
22
string utf8String = "Acción";
string propEncodeString = string.Empty;

byte[] utf8_Bytes = new byte[utf8String.Length];
for (int i = 0; i < utf8String.Length; ++i)
{
   utf8_Bytes[i] = (byte)utf8String[i];
}

propEncodeString = Encoding.UTF8.GetString(utf8_Bytes, 0, utf8_Bytes.Length);

出力は次のようになります

アクション

day’s ディスプレイ day's

DecodeFromUtf8() を呼び出します。

private static void DecodeFromUtf8()
{
    string utf8_String = "day’s";
    byte[] bytes = Encoding.Default.GetBytes(utf8_String);
    utf8_String = Encoding.UTF8.GetString(bytes);
}
于 2012-12-27T16:30:59.433 に答える
13

あなたのコードは、UTF8 でエンコードされた一連のバイトを読み取り、8 ビットのエンコードを使用してそれらをデコードしています。

バイトを UTF8 としてデコードするには、そのコードを修正する必要があります。

別の方法として (理想的ではありません)、不正な文字列を元のバイト配列に変換し、正しくないエンコーディングを使用してエンコードし、バイトを UTF8 として再デコードすることもできます。

于 2012-12-27T15:58:39.403 に答える
10
 Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(mystring));
于 2016-12-05T14:06:44.240 に答える
5

文字列を mysql データベースに保存する場合は、次のようにします:->

データベースのフィールド構造 i phpmyadmin [またはその他のコントロール パネル] は utf8-gerneral-ci に設定する必要があります

2)文字列を変更する必要があります[例。textbox1.text] をバイトにするため、

2-1) byte[] st2 を定義します。

2-2) 文字列 [textbox1.text] を unicode [mmultibyte string] に変換するには:

byte[] st2 = System.Text.Encoding.UTF8.GetBytes(textBox1.Text);

3) クエリの前に次の sql コマンドを実行します。

string mysql_query2 = "SET NAMES 'utf8'";
cmd.CommandText = mysql_query2;
cmd.ExecuteNonQuery();

3-2) 次に、この値をたとえば名前フィールドに次のように挿入する必要があります。

cmd.CommandText = "INSERT INTO customer (`name`) values (@name)";

4) 多くのソリューションがそれに注意を払わなかった主な仕事は、以下の行です: 以下のように add in コマンド パラメーターの代わりに addwithvalue を使用する必要があります。

cmd.Parameters.AddWithValue("@name",ut);

++++++++++++++++++++++++++++++++++ ???? ではなく、データベースサーバーで実際のデータを楽しむ

于 2013-09-26T21:50:08.757 に答える