質問

次のJavaコードを使用して、文字列から Byte [] への変換を試みます。

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

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

役に立ちましたか?

解決

Alexanderの答えは、なぜ存在するかを説明していますが、それを取り除きます。エンコード名に必要なエンディアンを指定するだけです:

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

他のヒント

最初の2バイトはバイト順マークです。エンコードで使用される各16ビットワードのバイト順を指定します。

追加の2バイトが追加される場所を確認するために、16進数でバイトを印刷してみてください-開始または終了ですか?

最初にバイトオーダーマーカーが見つかることを選んでいます(0xFEFF )-これにより、バイト配列を消費する(受信する)誰でも、エンコードがリトルエンディアンかビッグエンディアンかを認識できます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top