Android/Java:将UTF-8转换为UTF-16

Android/Java:将UTF-8转换为UTF-16,java,android,json,unicode,encoding,Java,Android,Json,Unicode,Encoding,我正在开发Android应用程序,我需要通过TCP/IP与本地服务器通信。我们使用JSON(我使用Android的Jackson解析器)将消息传递给服务器 当我使用jackson执行ObjectMapper.writeValueAsBytes()时,它会以UTF-8格式生成字节吗?我们的本地服务器是用C#.NET编写的,并且使用UTF-16小端编码 当字节到达服务器时,它无法解析JSON。当我通过将json字节转换为字符串来调试服务器时,我可以看到字符串的某些部分被置乱。我怀疑是因为UTF-8到

我正在开发Android应用程序,我需要通过TCP/IP与本地服务器通信。我们使用JSON(我使用Android的Jackson解析器)将消息传递给服务器

当我使用jackson执行ObjectMapper.writeValueAsBytes()时,它会以UTF-8格式生成字节吗?我们的本地服务器是用C#.NET编写的,并且使用UTF-16小端编码

当字节到达服务器时,它无法解析JSON。当我通过将json字节转换为字符串来调试服务器时,我可以看到字符串的某些部分被置乱。我怀疑是因为UTF-8到UTF-16的小端点问题

我的问题是,如何将UTF-8中的这些json字节转换为UTF-16 Little-Endian,然后再将其传递给服务器

谢谢你

byte[] utf8bytes = .......
byte[] utf16bytes = (new String(utf8bytes, "utf-8")).getBytes("utf-16");
未经测试


您可以为little和big-endian试用UTF-16LE和UTF-16BE。

我会更换服务器。首先,通过网络进行的任何操作的默认值都是网络按顺序。网络字节顺序是大端,而不是小端。其次,utf-8是在网络中传递字符串数据的标准。UTF-16是非常不正常的,并且往往只被在他们认为2字节足以容纳世界上任何字符的时代创建的较旧语言使用。如果您需要在内部使用utf-16,我会在输入阶段将其转换为utf-8,然后在输出阶段将其转换回utf-8。将字节打印为十六进制值,而不是文本字符串(然后在此处显示一个小示例,尤其是包含加扰部分,以比较正常和加扰的字节)。。。您的转换可能只是对非字母字符进行置乱。对于更快的答案:制作一个JSON示例(显示),然后显示相同的JSON字节的外观(加扰等)以获得建议。我怀疑是UTF-8/16的问题,虽然…编码工作良好!谢谢结果证明这不是编码的问题。加密有问题。谢谢你的代码。它帮助我确认问题不在于编码。谢谢