0

次の文字列を UTF8 としてエンコードすると:

カフェ

4バイトではなく5バイトで返ってきます。できれば4バイトで返してほしいです。

Encoding encoding = Encoding.UTF8;
string testString = "café";
Byte[] bytes = encoding.GetBytes(testString);

戻り値:

[0] 99
[1] 97
[2] 102
[3] 195
[4] 169

一方、「cafe」は 4 バイトのみを返します。

4

4 に答える 4

3

通常のエンコード方式ではできません。

次のように、目的のコード ページでカスタム エンコーディングを作成する必要があります。

Encoding encoding = Encoding.GetEncoding(437);
byte[] bytes = encoding.GetBytes("café");

出力:

{ 99, 97, 102, 130 }

é は、コード ページ 437では 130です。

デコードする場合は、同じエンコーディングでデコードする必要があります。そうしないと、奇妙な結果が得られます。

于 2012-08-17T00:15:29.053 に答える
3

é は Unicode U+00E9 です。Unicode 文字 U+0080 から U+07FF は、UTF8 で 2 バイトを使用します。詳細については、 http://en.wikipedia.org/wiki/Utf8を参照してください。

4 バイトだけが必要な場合は、UTF8 を使用できません。理論的には、シングルバイト文字エンコーディングであるISO 8859-1を使用できます。

于 2012-08-17T00:15:43.540 に答える
2

UTF-8 の文字は、1 から 6 バイトを取ることができます。あなたの場合、「é」は2バイトかかります。UTF-8 の詳細については、こちらを参照してください: UTF-8、ISO 10646 の変換形式

于 2012-08-17T00:20:52.140 に答える
0

に変換するUTF8ことにISO8859-1なり、5バイトではなく4バイトを返すようになりました。

Encoding utf8 = Encoding.UTF8;
string testString = "café";
byte[] utfBytes = utf8.GetBytes(testString); // 5 bytes

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
byte[] isoBytes = iso.GetBytes(testString); // 4 bytes
byte[] convertedUtf8Bytes = Encoding.Convert(utf8, iso, utfBytes); // 4 bytes

string msg = iso.GetString(isoBytes);
string msgConverted = iso.GetString(convertedUtf8Bytes);

Console.WriteLine(msg);
Console.WriteLine(msgConverted);

出力:

カフェ

カフェ

于 2012-08-17T00:29:20.510 に答える