【问题标题】:Android/Java: convert UTF-8 to UTF-16Android/Java:将 UTF-8 转换为 UTF-16
【发布时间】: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


【解决方案1】:

类似

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

未经测试。

您可以尝试将 UTF-16LE 和 UTF-16BE 用于小端和大端。

【讨论】:

  • 编码工作正常!谢谢。事实证明这不是编码问题。加密有问题。感谢您的代码。它可以帮助我验证问题不在于编码。谢谢!
猜你喜欢
  • 2015-09-21
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2013-05-20
  • 2012-06-30
  • 2013-04-11
相关资源
最近更新 更多