UTF-16 バイト配列を との間でエンコード/デコードする必要がありますjava.lang.String
。バイト配列はByte Order Marker (BOM)で与えられ、BOM でバイト配列をエンコードする必要があります。
また、私は Microsoft クライアント/サーバーを扱っているので、誤解を避けるためにエンコーディングを (LE BOM と共に) リトル エンディアンで出力したいと思います。BOM を使用するとビッグ エンディアンで動作するはずですが、Windows の世界で上流に泳ぎたくはありません。
例として、BOM を使用してリトル エンディアンでjava.lang.String
asをエンコードするメソッドを次に示します。UTF-16
public static byte[] encodeString(String message) {
byte[] tmp = null;
try {
tmp = message.getBytes("UTF-16LE");
} catch(UnsupportedEncodingException e) {
// should not possible
AssertionError ae =
new AssertionError("Could not encode UTF-16LE");
ae.initCause(e);
throw ae;
}
// use brute force method to add BOM
byte[] utf16lemessage = new byte[2 + tmp.length];
utf16lemessage[0] = (byte)0xFF;
utf16lemessage[1] = (byte)0xFE;
System.arraycopy(tmp, 0,
utf16lemessage, 2,
tmp.length);
return utf16lemessage;
}
Javaでこれを行う最良の方法は何ですか? 理想的には、最初に 2 つの余分なバイトが割り当てられた新しいバイト配列にバイト配列全体をコピーすることは避けたいと思います。
このような文字列のデコードにも同じことが言えますが、java.lang.String
コンストラクターを使用すると、より簡単になります。
public String(byte[] bytes,
int offset,
int length,
String charsetName)