如何在不破坏基于ASCII的代码的情况下增加美国ASCII字符集的范围?

问题描述 投票:0回答:1

我正在使用打开文件

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

文件看起来像这样:

enter image description here

如果我在打开标题之前手动删除标题(带有方括号的部分),该代码将起作用(无论如何我稍后将在代码中删除它们)。有没有一种方法可以扩展字符集的范围,而又不会破坏仅适用于ASCII的代码,或者这是一种罕见的例外吗?

Here's pgn中的文件(可以以txt打开)。

java file ascii non-ascii-characters
1个回答
0
投票

文件几乎是ASCII格式。问题出在“科特迪瓦”中的quote字符。

该文件包含一个0x92字节。在Windows代码页1252(西欧语言)中,它是Unicode字符U + 2019右单引号。

问题是1252代码页与ISO-8859-1略有不同,ISO-8859-1对某些常见字符(如欧元符号和左右引号)使用了未映射的位置。而且它不在always present字符集的列表中。

如何解决:

  • 如果您的系统支持win1252cp1252字符集,请使用它。
  • 否则,您应该使用FilterInputStream替换非ASCII字符,例如,将其替换为空格(ASCII 0x20)或从自定义映射(0x92-> 0x27)替换为右单引号()一个简单的APOSTROPHE(')。之后,InputStreamReader将为您提供预期的字符。
© www.soinside.com 2019 - 2024. All rights reserved.