UTF-16BE到UTF-16LE,然后返回

Rya*_*anM 6 unicode blackberry java-me

我有一个正在研究的Blackberry项目,我需要将使用UTF-16LE(小端)编码的字符串字节数组转换为UTF-16BE(大端)编码和字符串的字节数组.反之亦然.我正在连接的服务器是以UTF-16LE编码发送BlackBerry设备字节数组的字符串,但设备本身不支持UTF-16LE.当我尝试将字节数组解码回字符串时,字符串难以辨认.但是,该设备支持UTF-16BE.我还需要反转这个过程,即将具有UTF-16BE编码的字符串的字节数组转换为服务器期望的内容(UTF-16LE).谢谢.

无法在设备上执行此操作:

String test = "test";
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException
Run Code Online (Sandbox Code Playgroud)

可以这样做:

String test = "test";
byte[] testBytes = test.getBytes("UTF-16BE");//works
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 11

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

要在UTF-16LE和UTF-16BE之间进行转换,只需循环遍历每个代码单元的每个2字节对的顺序的字节.代理代码单元的顺序在LE和BE之间不会改变.IOW,只需将字节0和1互相交换,互相交换字节2和3,依此类推.