如何使用 BOM 对 UTF-16LE 字节数组进行编码/解码?
我需要将 UTF-16 字节数组编码/解码为 /字节数组是用字节顺序标记(BOM)给我的,我需要用BOM编码字节数组。java.lang.String
另外,由于我正在处理Microsoft客户端/服务器,因此我想以小端序(以及LE BOM)发出编码以避免任何误解。我确实意识到,使用BOM,它应该可以工作在大端序,但我不想在Windows世界中上游游走。
例如,下面是一个使用 BOM 对小端序中的 as 进行编码的方法:java.lang.String
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中做到这一点的最佳方法是什么?理想情况下,我希望避免将整个字节数组复制到一个新的字节数组中,该数组在开始时分配了两个额外的字节。
解码这样的字符串也是如此,但是通过使用java.lang.String
构造函数,这要简单得多:
public String(byte[] bytes,
int offset,
int length,
String charsetName)