我正在使用打开文件
private String getStringFromFile(File file) {
try {
return Files.readString(Paths.get(file.getPath()), StandardCharsets.US_ASCII);
}
catch (Exception e) {
System.out.println("Error while reading: " + file.getName());
return "";
}
}
即使文件似乎显然与ASCII兼容,我也得到Error while reading: fileName
。
文件看起来像这样:
如果我在打开标题之前手动删除标题(带有方括号的部分),该代码将起作用(无论如何我稍后将在代码中删除它们)。有没有一种方法可以扩展字符集的范围,而又不会破坏仅适用于ASCII的代码,或者这是一种罕见的例外吗?
Here's pgn中的文件(可以以txt打开)。
文件几乎是ASCII格式。问题出在“科特迪瓦”中的quote字符。
该文件包含一个0x92字节。在Windows代码页1252(西欧语言)中,它是Unicode字符U + 2019右单引号。
问题是1252代码页与ISO-8859-1略有不同,ISO-8859-1对某些常见字符(如欧元符号€
和左右引号)使用了未映射的位置。而且它不在always present字符集的列表中。
如何解决:
win1252
或cp1252
字符集,请使用它。FilterInputStream
替换非ASCII字符,例如,将其替换为空格(ASCII 0x20)或从自定义映射(0x92-> 0x27)替换为右单引号(’
)一个简单的APOSTROPHE('
)。之后,InputStreamReader
将为您提供预期的字符。