java - UTF-8 和 ISO 8859-1 之间的转换 :

标签 java encoding utf-8 iso-8859-1

我找到了以下 code 所以。这真的有用吗?

String xml = new String("áéíóúñ");
byte[] latin1 = xml.getBytes("UTF-8");
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");

我的意思是,latin1 在第二行是 UTF-8 编码的,但在第三行是 ISO-8859-1 编码的?这行得通吗?

并不是我不想批评引用的代码,我只是感到困惑,因为我遇到了一些非常相似的遗留代码,这些代码似乎有效,但我无法解释原因。

编辑:我猜原来是post ,第 2 行中的“UTF-8”只是一个错字。但我不确定...

EDIT2:在我最初发布后,有人编辑了上面的代码并将第二行更改为 byte[] latin1 = xml.getBytes("ISO-8859-1");。我不知道是谁干的,也不知道他为什么这样做,但很明显这把事情搞砸了。对所有看到错误版本代码的人表示抱歉。我不知道是谁编辑的。上面的代码现在是正确的。

最佳答案

getBytes(Charset charset) 生成使用 charset 编码的字节数组,因此 latin1 是 UTF-8 编码的。

System.out.println(latin1.length); 作为第三行,它会告诉你字节数组长度是 12。这意味着它真的是 UTF-8 编码的。

new String(latin1, "ISO-8859-1") 不正确,因为 latin1 是 UTF-8 编码的,您要将其解析为 ISO-8859-1。这就是为什么它会产生一个由 12 个垃圾符号组成的字符串:áéÃóúñ

当您使用 UTF-8 编码从 áéóúñ 获取字节时,它会生成一个 24 长字节数组。

我希望现在一切都清楚了。

关于java - UTF-8 和 ISO 8859-1 之间的转换 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330793/

相关文章:

c++ - 什么 utf 格式应该 boost wdirectory_iterator 返回?

java - 我的 Java 方法不打印任何内容 - 打印数字的所有可能子集而不重复

java - 如何设置不同类的 JFrame 大小

encoding - 使 Ruby 1.9 将所有源文件视为 UTF-8 编码。 (即使需要重新编译解释器)

r - RMarkdown PDF 输出中未显示某些 Unicode 字符

php - PHP str_word_count() 多字节安全吗?

java - 使用String作为BST键值

java - 使用 Jackson 反转 JSON pretty-print

Python。短语表示,如何改变?

python - 在 Django 模型字段中存储二进制哈希值