Java中从CP1250到UTF-8的错误/奇怪编码文件

时间:2017-08-27 20:29:13

标签: java netbeans encoding utf-8 decoding

我对从CP1250到UTF-8的正确编码文件有问题。几乎所有字符都被正确转换,但字符“ň”和“Ř”不是(有“?”字符“)。

在Netbeans,我为项目设置了UTF-8编码。

文件中的测试字符串可以是“skříňSKŘÍŇ”。控制台输出:“skĹ™ĂĹ?SKĹ?‡‡”。输出与转换不同,例如,在PHP中。我到底了。

我的代码:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("file-cp1250.txt"), "CP1250"));
while ((line = br.readLine()) != null) {
  line = new String(line.getBytes("UTF-8"), "CP1250");
  System.out.println(line);
}

感谢您的建议

1 个答案:

答案 0 :(得分:3)

以下主要是正确的:

BufferedReader br = new BufferedReader(
    new InputStreamReader(new FileInputStream("file-cp1250.txt"), "CP1250"));
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

即InputStream的二进制数据被指定为Windows / Code Page 1250,并通过解码读取。 Java String始终保持Unicode(因此它可以组合所有脚本)。

然而,System.out通常是平台相关的控制台,可能不是Cp1250,而是其他东西。 Unicode可能会转换为Cp1252,Microsofts Latin-1。然后有人想到有一些bug。无法使用System.out的地方。