Java将ISO-8859-1转换为UTF-8

4

我有一个属性文件,其中包含亚洲语言的翻译,我认为该文件保存为ISO-8859-1格式。我试图将它们转换为UTF-8格式。所以è­¦å:应该等于警告:

我已经尝试了这个网站和其他一些网站上列出的几种方法,但是都没有成功。

byte[] isoBytes = line.getBytes("ISO-8859-1");
byte[] utf8 = new String(isoBytes, "ISO-8859-1").getBytes("UTF-8");

CharBuffer charBuf = null;
Charset isocharset = Charset.forName("iso-8859-1");
CharsetDecoder isoDecoder = Charset.forName("iso-8859-1").newDecoder();
CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
byte sByte[] = line.getBytes("iso-8859-1");
charBuf = utf8Decoder.decode(isoBuf);

最简单的方法是将è­¦å:转换为警告:,谢谢Rich。@Pshemo提供了我要找的答案。

byte[] isoBytes = line.getBytes("ISO-8859-1");
System.out.println(new String(isoBytes, "UTF-8"));

谢谢大家的帮助。

2
byte[] isoBytes = line.getBytes("ISO-8859-1"); System.out.println(new String(isoBytes, "UTF-8")); 看起来运行良好。 - Pshemo
2
你不能使用ISO-8859-1编写任何大于255的字符,尤其是亚洲字符。如果你有亚洲字符,那么你并没有使用ISO-8859-1。 - Peter Lawrey
@Pshemo 谢谢,这正是我在寻找的。我的问题是尝试再次转换utf8字节数组。感谢您澄清了这一点。 - user3351706
3个回答

4
这对我很有帮助: @Pshemo提供了我所需的答案。
byte[] isoBytes = line.getBytes("ISO-8859-1");
System.out.println(new String(isoBytes, "UTF-8"));

0
实际上,显示UTF-8内容会导致ISO-8859-1:è­¦å(加上一些东西)。所以没问题。
所以文件是UTF-8格式的。JDK有一个工具{{link1:native2ascii}},可以将非ASCII字符转换为\uXXXX进行编码和解码。
native2ascii -encoding UTF-8 old.properties new.properties

使用像JEdit或Notepad++这样的程序员编辑器,以确保编码正确。


0

最简单和最安全的方法是将文件保存为UTF-8格式并按照此格式读取。

很可能您在这里找到的答案已经说明ISO Latin-1(ISO-8859-1)无法存储UTF-8可以处理的所有代码点(特别是亚洲字符),因此将属性(文本资源?)存储为ISO Latin-1将导致损失。

因此,要么将其存储为UTF-8,要么使用Unicode代码点,例如\u8b66\u544a表示警告Warning :) )。


不幸的是,这是一个庞大的项目,我没有能力做到那一点。我只需要快速而简单的Java代码。 - user3351706

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接