【发布时间】:2017-09-24 20:58:31
【问题描述】:
我正在开发 Android 应用程序,我需要通过 TCP/IP 与本地服务器通信。我们使用 JSON(我正在使用适用于 Android 的 Jackson 解析器)将消息传递到服务器。
当我使用 jackson 执行 ObjectMapper.writeValueAsBytes() 时,它会生成 UTF-8 字节吗?我们的本地服务器是用 C# .NET 编写的,使用 UTF-16 Little Endian 编码。
当字节到达服务器时,它无法解析 JSON。当我通过将 json 字节转换为字符串来调试服务器时,我可以看到字符串的某些部分被打乱了。我怀疑是因为这个 UTF-8 到 UTF-16 Little Endian 的问题。
我的问题是,在将 UTF-8 中的这些 json 字节传递给服务器之前,如何将其转换为 UTF-16 Little Endian。 p>
谢谢
【问题讨论】:
-
我会更换服务器。首先,通过网络传输的任何内容的默认设置是网络再见顺序。网络字节顺序是大端,而不是小。其次,utf-8 是在网络中传递字符串数据的标准。 UTF-16 是非常不正常的,并且往往只被那些在他们认为 2 个字节足以容纳世界上任何字符的时代创建的旧语言使用。如果您需要在内部使用 utf-16,我会在输入阶段将其转换,然后在输出阶段转换回 utf-8。
-
将字节打印为十六进制值而不是文本字符串(然后在此处显示一个小示例,尤其是包含加扰部分以比较正常字节与加扰字节)...您的转换可能只是在打乱非字母字符。 为了更快的答案:制作一个 JSON 示例(显示它),然后显示相同的 JSON 字节的外观(加扰等)以寻求建议。我怀疑是 UTF-8/16 的问题...
标签: java android json unicode encoding