我调用了一个Web服务,这使我返回了具有UTF-8编码的响应xml。我使用getAllHeaders()方法在Java中进行了检查。

现在,在我的Java代码中,我得到该响应,然后对其进行一些处理。然后,将其传递给其他服务。

现在,我在Google上搜索了一下,发现默认情况下Java字符串编码为UTF-16。

在我的响应xml中,其中一个元素具有字符É。现在,这已经搞定了我对其他服务提出的后期处理请求。

它没有发送É,而是发送了一些乱码。现在我想知道,这两种编码真的会有很多区别吗?如果我想知道É将从UTF-8转换为UTF-16,那我该怎么做?

谢谢

最佳答案

UTF-8和UTF-16都是可变长度编码。但是,在UTF-8中,字符可能至少占据8位,而在UTF-16中,字符长度以16位开始。

UTF-8主要优点:

  • 基本ASCII字符,例如数字,不带拉丁字符
    重音等占用一个字节,该字节与US-ASCII相同
    表示。这样,所有US-ASCII字符串都变为有效的UTF-8,
    在许多情况下提供了良好的向后兼容性。
  • 没有空字节,允许使用以空终止的字符串,这
    也引入了很多向后兼容性。

  • UTF-8主要缺点:
  • 许多常见字符的长度不同,这会减慢索引速度
    并计算出一个字符串长度。

  • UTF-16主要优点:
  • 最合理的字符,例如拉丁语,西里尔字母,中文,日语
    可以用2个字节表示。除非真的是外来人物
    需要,这意味着UTF-16的16位子集可以用作
    固定长度编码,可加快索引编制速度。

  • UTF-16主要缺点:
  • US-ASCII字符串中有很多空字节,这意味着没有
    空终止的字符串和大量浪费的内存。

  • 通常,UTF-16通常更适合于内存中表示,而UTF-8非常适合于文本文件和网络协议(protocol)

    08-03 13:49
    查看更多