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

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

现在,在我的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位子集可以用作a
固定长度编码,可加快索引速度.

主要UTF-16缺点:

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

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...