UTF-8和UTF-16之间是否存在巨大差异?

Kra*_*ken 7 java xml utf-8 utf-16 character-encoding

我调用了一个webservice,它给了我一个具有UTF-8编码的响应xml.我在java中使用getAllHeaders()方法检查了一下.

现在,在我的java代码中,我接受了该响应,然后对其进行了一些处理.然后,将其传递给其他服务.

现在,我用google搜索了一下,发现默认情况下,Java中字符串的编码是UTF-16.

在我的回复xml中,其中一个元素有一个字符É.现在这搞砸了我对其他服务的后处理请求.

它没有发送É,而是发送了一些乱七八糟的东西.现在我想知道,这两种编码真的会有很大不同吗?如果我想知道什么将从UTF-8转换为UTF-16,那么我该怎么做呢?

谢谢

Arj*_*ary 24

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

主要UTF-8专业人士:

  1. 数字,没有重音的拉丁字符等基本ASCII字符占用一个字节,与US-ASCII表示相同.这样,所有US-ASCII字符串都变为有效的UTF-8,在许多情况下,它提供了良好的向后兼容性.
  2. 没有空字节,允许使用以null结尾的字符串,这也引入了大量的向后兼容性.

主要UTF-8缺点:

  1. 许多常见字符具有不同的长度,这会减慢索引速度并极大地计算字符串长度.

主要UTF-16专业人士:

  1. 最合理的字符,如拉丁语,西里尔语,中文,日语,可以用2个字节表示.除非需要非常奇特的字符,否则这意味着UTF-16的16位子集可以用作固定长度编码,从而加快索引速度.

主要UTF-16缺点:

  1. US-ASCII字符串中有很多空字节,这意味着没有以空字符结尾的字符串和大量浪费的内存.

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