我有一个正在研究的Blackberry项目,我需要将使用UTF-16LE(little endian)编码的字符串字节数组转换为UTF-16BE(big endian)编码的字符串字节数组,并且可见。反之亦然。我正在连接的服务器是以UTF-16LE编码发送BlackBerry设备字节数组的字符串,但设备本身不支持UTF-16LE。当我尝试将字节数组解码回字符串时,字符串难以辨认。但是,该设备支持UTF-16BE。我还需要反转这个过程,即将具有UTF-16BE编码的字符串的字节数组转换为服务器期望的内容(UTF-16LE)。感谢。
我无法在设备上执行此操作:
String test = "test";
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException
我可以这样做:
String test = "test";
byte[] testBytes = test.getBytes("UTF-16BE");//works
答案 0 :(得分:11)
UTF-16每个代码单元使用两个字节,一些Unicode代码点使用一个代码单元编码,其他代码点使用两个代码单元(称为代理对)。
要在UTF-16LE和UTF-16BE之间进行转换,只需循环遍历每个代码单元的每个2字节对的顺序的字节。代理代码单元的顺序在LE和BE之间不会改变。 IOW,只需将字节0和1互相交换,互相交换字节2和3,依此类推。