以下の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バイトは Byte Order Mark です。エンコードで使用される各16ビットWordのバイトの順序を指定します。
バイトを16進数で印刷して、追加の2バイトが追加されている場所を確認してください。開始または終了のどちらですか?
最初に バイトオーダーマーカー が見つかることを選んでいます-これにより、バイト配列を消費する(受信する)誰でもエンコードがリトルエンディアンかビッグエンディアンかを認識できます。
UTFの先頭には、このストリームが特定の形式でエンコードされていることを示すバイトオーダーマーカーがあります。他のユーザーが指摘したように、
最初のバイトは0XFEです
2番目のバイトは0XFFです
残りのバイトは
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57