47

文字列からByte[]次の Java コードを使用するように変換しようとします。

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

長さ 22 バイトのバイト配列を取得しますが、このパディングがどこから来るのかわかりません。長さ 20 の配列を取得するにはどうすればよいですか?

4

4 に答える 4

71

アレクサンダーの答えは、なぜそこにあるのかを説明していますが、それを取り除く方法は説明していません。エンコード名で必要なエンディアンを指定するだけです。

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
于 2008-10-23T08:53:15.700 に答える
25

最初の 2 バイトがByte Order Markである可能性があります。エンコードで使用される各 16 ビット ワードのバイトの順序を指定します。

于 2008-10-23T08:50:31.293 に答える
7

バイトを 16 進数で出力して、余分な 2 バイトが追加された場所を確認してみてください。それらは先頭ですか、それとも末尾ですか?

先頭 (0xFEFF) にバイト オーダー マーカーがあることを選択します。これにより、バイト配列を消費 (受信) する人は、エンコーディングがリトル エンディアンかビッグ エンディアンかを認識できます。

于 2008-10-23T08:52:42.893 に答える
7

UTF の先頭には、このストリームが特定の形式でエンコードされていることを示すバイト オーダー マーカーがあります。他のユーザーが指摘したように、
1 バイト目は 0XFE
2 バイト目は 0XFF
残りのバイトは
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

于 2008-10-23T08:59:48.480 に答える