2017-04-27 118 views
1

我正在开发Android应用程序,我需要通过TCP/IP与本地服务器进行通信。我们使用JSON(我使用Jackson的解析器)将消息传递给服务器。Android/Java:将UTF-8转换为UTF-16

当我ObjectMapper.writeValueAsBytes()使用杰克逊它产生以UTF-8字节?我们的本地服务器是用C#.NET编写的,并且使用UTF-16 Little Endian编码。

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

我的问题是,我该如何将这些JSON个字节是UTF-8UTF-16小端之前,我把它传递给服务器。

感谢

+0

我会改变服务器。首先,通过网络的任何事情的默认是网络再见订单。网络字节顺序是大端,不小。其次,utf-8是在网络中传递字符串数据的标准。 UTF-16是非常不正常的,并且往往只能用于那些在他们认为2个字节足以容纳世界上任何角色的日子里创建的旧语言。如果你需要在内部使用utf-16,我会在输入阶段转换它,并在输出时转换回utf-8。 –

+0

将字节打印为十六进制值而不是文本字符串(然后在此处显示一个小样本,尤其是包含用于比较正常对比加扰的字节的加密部分)......可能您的转换只是制造非字母字符的混乱。 **对于更快的答案**:制作一个示例JSON(显示它),然后显示相同的JSON字节如何查找(加扰等)以获得建议。我怀疑是UTF-8/16问题,虽然... –

回答

2

喜欢的东西

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

未经检验。

您可以尝试使用UTF-16LE和UTF-16BE作为小端和大端。

+0

编码工作正常!谢谢。事实证明,这不是编码问题。加密有问题。感谢您的代码。它可以帮助我确认问题不在编码中。谢谢! – Sam