Java UTF-8和UTF-16之间有很大的区别吗
我调用一个webservice,它返回一个具有UTF-8编码的响应xml。我在java中使用Java UTF-8和UTF-16之间有很大的区别吗,java,xml,utf-8,character-encoding,utf-16,Java,Xml,Utf 8,Character Encoding,Utf 16,我调用一个webservice,它返回一个具有UTF-8编码的响应xml。我在java中使用getAllHeaders()方法检查了这一点 现在,在我的java代码中,我获取该响应,然后对其进行一些处理。然后,将其传递给其他服务 现在,我在谷歌上搜索了一下,发现默认情况下,Java中字符串的编码是UTF-16 在我的xml响应中,其中一个元素有一个字符。现在,我向另一家服务机构提出了后处理请求,这一点也被打断了 它没有发送É,而是发送了一些jibberish的东西。现在我想知道,这两种编码真的会
getAllHeaders()
方法检查了这一点
现在,在我的java代码中,我获取该响应,然后对其进行一些处理。然后,将其传递给其他服务
现在,我在谷歌上搜索了一下,发现默认情况下,Java中字符串的编码是UTF-16
在我的xml响应中,其中一个元素有一个字符。现在,我向另一家服务机构提出了后处理请求,这一点也被打断了
它没有发送É,而是发送了一些jibberish的东西。现在我想知道,这两种编码真的会有很大的不同吗?如果我想知道什么会从UTF-8转换成UTF-16,那么我该怎么做呢?有两件事:
- 用于交换数据的编码李>
- Java的内部字符串表示形式
String
s(char
array),并将表单String
s转换为数据
你能想到的最基本的类是和。但是还有很多其他的String.getBytes()
,所有的Reader
s和Writer
s都是两种可能的方法。还有字符
的所有静态方法
如果您在某个时候看到乱码,这意味着您无法将原始字节数据解码或编码为Java字符串。但是,Java字符串使用UTF-16这一事实与此无关
特别是,您应该注意,当您创建读卡器
或写卡器
时,您应该指定编码;如果您未能这样做,将使用默认的JVM编码,它可能是UTF-8,也可能不是。
UTF-8和UTF-16都是可变长度编码。然而,在UTF-8中,一个字符可能至少占用8位,而在UTF-16中,字符长度从16位开始
UTF-8的主要优点:
一般来说,UTF-16通常更适用于内存表示,而UTF-8非常适用于文本文件和网络协议。该网站提供UTF到UTF的转换
UTF-32可以说是最具可读性的Unicode编码形式,因为它的大端十六进制表示法只是Unicode标量值,没有“U+”前缀,零填充到八位数字,而UTF-32表示法确实使编程模型更简单,平均存储容量的增加有实际的缺点,这使得完全过渡到UTF-32不再那么引人注目 然而
UTF-32与旧的UCS-4编码相同,并且保持固定宽度。为什么这个宽度可以保持不变?由于UTF-16现在是可以编码最少字符的格式,因此它为所有格式设置了限制。根据定义,1112064是Unicode或ISO10646将定义的代码点总数。由于Unicode现在只定义在0到10FFFF之间,UTF-32现在听起来有点像是一种无意义的编码,因为它是32位宽的,但只使用了大约21位,这使得这非常浪费。UTF-8:一般来说,您应该使用UTF-8。大多数HTML文档都使用这种编码 它使用至少8位数据来存储每个字符。这可以提高存储效率,尤其是当文本主要包含英文ASCII字符时。但高阶字符(如非ASCII字符)可能需要最多24位 UTF-16: 此编码使用至少16位对字符进行编码,包括低阶ASCII字符和高阶非ASCII字符
如果您对主要由非英语或非ASCII字符组成的文本进行编码,UTF-16可能会导致较小的文件大小。但是如果您使用UTF-16编码大部分ASCII文本,它将占用更多空间。如何读取和写入XML?JAXB?斯塔克斯?你能展示你创建读写器的代码吗?回答得好。你能不能打消我的好奇心,说出UTF-32的一个实际用途?就我的一生而言,我想不出它存在的理由。一个简单的谷歌给我带来的仅仅是“速度优化”。我有一个问题,也许是一个很小的问题。以一个简单的记事本为例。假设我调用某个服务,该服务返回UTF-8编码的数据。这基本上是所有的ASCII或其他编码。现在我有一个来自webservice的角色(说“a”)。现在这个A将被映射到UTF-8中的某个东西。例如00000000(8位)。现在当记事本解释这个时,它会将它转换成0000(4位)。现在,它不会把我的一切都搞砸吗?检查我下面的答案UTF-32可以说是最容易让人读懂的Unicode编码形式,因为它的大端十六进制表示形式只是Unicode标量值,没有“U+”pr