我调用了一个webservice,它给了我一个具有UTF-8编码的响应xml。我在java中使用getAllHeaders()
方法检查了它。
现在,在我的java代码中,我接受了该响应,然后对其进行了一些处理。然后,将其传递给不同的服务。
现在,我用google搜索了一下,发现默认情况下,Java中的字符串编码是UTF-16。
在我的回复xml中,其中一个元素有一个角色É。现在这搞砸了我对其他服务的后处理请求。
而不是发送É,它发送了一些乱七八糟的东西。现在我想知道,这两种编码真的会有很大不同吗?如果我想知道什么将从UTF-8转换为UTF-16,那么我该怎么办呢?
由于
答案 0 :(得分:20)
UTF-8和UTF-16都是可变长度编码。但是,在UTF-8中,一个字符可能占用至少8位,而在UTF-16中,字符长度从16位开始。
主要UTF-8职业选手:
主要的UTF-8缺点:
主要UTF-16专业人士:
主要UTF-16缺点:
一般来说,UTF-16通常更适合内存中表示,而UTF-8非常适合文本文件和网络协议
答案 1 :(得分:3)
有两件事:
你应该不专注于第二点;)问题是使用适当的方法将数据(字节数组)转换为String
s {{1} }数组最终),并将表单char
转换为您的数据。
您可以想到的最基本的课程是CharsetDecoder
和CharsetEncoder
。但还有很多其他的。 String
,所有String.getBytes()
和Reader
只是两种可能的方法。并且还存在Writer
的所有静态方法。
如果您在某些时候看到乱码,则表示您无法将原始字节数据解码或编码为Java字符串。但同样,Java字符串使用UTF-16的事实与此无关。
特别是,您应该知道,在创建Character
或Reader
时,您应该指定编码;如果你没有这样做,将使用默认的JVM编码,它可能是,也可能不是UTF-8。
答案 2 :(得分:1)
本网站提供UTF到UTF转换
http://www.fileformat.info/convert/text/utf2utf.htm
UTF-32可以说是人类可读的Unicode编码表单,因为它的大端十六进制表示只是没有“U +”前缀的Unicode标量值,并且填充为八位数而且是UTF- 32表示确实使编程模型更简单,增加的平均存储大小有真正的缺点,使得完全过渡到UTF-32不那么引人注目。
无论其
UTF-32与旧的UCS-4编码相同,并保持固定宽度。为什么这可以保持固定宽度?由于UTF-16现在是可以编码最少字符数的格式,因此它为所有格式设置了限制。定义1,112,064是将由Unicode或ISO 10646定义的代码点总数。由于Unicode现在仅定义为0到10FFFF,UTF-32现在听起来有点像无点编码,因为它' 32位宽,但只使用大约21位,这使得这非常浪费。
答案 3 :(得分:-1)
UTF-8:一般来说,您应该使用 UTF-8。大多数 HTML 文档都使用这种编码。
它使用至少 8 位数据来存储每个字符。这可以提高存储效率,尤其是当文本主要包含英文 ASCII 字符时。但是高阶字符,例如非 ASCII 字符,每个可能需要多达 24 位!
UTF-16: 这种编码至少使用 16 位来编码字符,包括低位 ASCII 字符和高位非 ASCII 字符。
如果您编码的文本主要由非英语或非 ASCII 字符组成,则 UTF-16 可能会导致文件变小。但是,如果您使用 UTF-16 来编码大部分 ASCII 文本,则会占用更多空间。