6

我有一个正在处理的 Blackberry 项目,我需要将使用 UTF-16LE(小端)编码的字符串字节数组转换为 UTF-16BE(大端)编码的字符串字节数组,并且 vis。反之亦然。我正在连接的服务器正在以 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
4

1 回答 1

11

UTF-16 每个代码单元使用两个字节,一些 Unicode 代码点使用一个代码单元编码,而其他代码点使用两个代码单元(称为代理对)。

要在 UTF-16LE 和 UTF-16BE 之间进行转换,只需循环交换每个代码单元的每个 2 字节对的顺序的字节即可。代理代码单元的顺序在 LE 和 BE 之间没有变化。IOW,简单地相互交换字节 0 和 1,相互交换字节 2 和 3,依此类推。

于 2012-08-24T01:49:12.353 回答