Blackberry UTF-16BE至UTF-16LE,然后返回

Blackberry UTF-16BE至UTF-16LE,然后返回,blackberry,unicode,java-me,Blackberry,Unicode,Java Me,我有一个Blackberry项目,我正在工作,我需要将使用UTF-16LE(小端)编码的字符串字节数组转换为UTF-16BE(大端)编码的字符串字节数组,然后使用vis。反之亦然。我连接的一台服务器正在向BlackBerry设备发送UTF-16LE编码的字符串字节数组,但该设备本身不支持UTF-16LE。当我试图将字节数组解码回字符串时,字符串是难以辨认的。但是,该设备不支持UTF-16BE。我还需要反转此过程,即将UTF-16BE编码的字符串字节数组转换为服务器期望的值(UTF-16LE)。谢

我有一个Blackberry项目,我正在工作,我需要将使用UTF-16LE(小端)编码的字符串字节数组转换为UTF-16BE(大端)编码的字符串字节数组,然后使用vis。反之亦然。我连接的一台服务器正在向BlackBerry设备发送UTF-16LE编码的字符串字节数组,但该设备本身不支持UTF-16LE。当我试图将字节数组解码回字符串时,字符串是难以辨认的。但是,该设备不支持UTF-16BE。我还需要反转此过程,即将UTF-16BE编码的字符串字节数组转换为服务器期望的值(UTF-16LE)。谢谢

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

String test = "test";
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException
我可以这样做:

String test = "test";
byte[] testBytes = test.getBytes("UTF-16BE");//works

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


要在UTF-16LE和UTF-16BE之间转换,只需在字节之间循环,交换每个代码单元的每个2字节对的顺序。代理代码单元的顺序在LE和BE之间不会改变。这样,只需交换字节0和1,交换字节2和3,依此类推。

如果只使用
byte[]testBytes=test.getBytes(“UTF-16”)
?您的服务器是否将正确的BOM字符放在字符串的开头,Blackberry是否自动检测到big-endian?@HeatfanJohn test.getBytes(“UTF-16”)也会引发异常。我不确定服务器是否将BOM表放在字符串的开头。它是一个ASP.NETADFS服务器(如果有帮助的话)。黑莓不自动检测。谢谢,我明白了。我试试看,然后回来汇报。谢谢