【问题标题】:Read ANSI file with polish letters and show in console without Accents读取带有波兰语字母的 ANSI 文件并在没有重音的控制台中显示
【发布时间】:2020-02-14 20:00:53
【问题描述】:

我在 file.csv 中有这一行“ĆćĘęŁŹźł”,它被编码(如 Notepad++ 所示)为 ANSI。如何在 CcEeLzzl 等控制台中正确显示此行。

为了去除重音,我使用了来自 apache 的 StringUtils.stripAccents(myLine) 但仍然得到“��Ee����”

        FileReader fr = null;
        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader(fileName2));
            while ((sCurrentLine = StringUtils.stripAccents(br.readLine())) != null) {
                System.out.println(StringUtils.stripAccents(sCurrentLine));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
                if (fr != null)
                    fr.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }```

I want in COnsole this "CcEeLzzl", not that "ĆćĘ꣏źł". Please help me.

【问题讨论】:

  • 欢迎来到 SO!也许你会在这里找到你的答案:stackoverflow.com/questions/18141162/…
  • 谢谢你,@Jonathan !!!)我试过这个。它确实将我的文件转换为 UTF-8,但我得到了这样一行 ÆæEe£�Ÿ³。
  • 我怀疑字符串是正确的,不需要转换。查找curiosa的答案,您可能需要手动转换字母。
  • 您应该尝试的第一件事是br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName2), "windows-1250"));。您所说的“控制台”是指 Microsoft Windows 命令窗口吗?
  • @VGR,不抱歉,“控制台”我的意思是显示 System.out.println(lineFromANSIFile)

标签: java file encoding utf-8 ansi


【解决方案1】:

您似乎想要应用从波兰字母到 stripAccents 域之外的 ascii 的自定义映射。可能您必须自己定义它,例如如下所示(仅针对“Ł”和“ł”显示)。

剧透:不,你不必这样做。 windows 编码上的 ansi 是罪魁祸首。正确解码StringUtils.stripAccents 工作正常。见 cmets。但是,如果你离开了 stripAccents 的域名...

public void Ll() {
    Map<String, String> map = new HashMap<>();
    map.put("Ł", "L");
    map.put("ł", "l");

    System.out.println(Arrays.stream("ŁałaŁała".split("(?!^)"))
            .map(c -> {
                String letter = map.get(c);
                return letter == null ? c : letter;
            })
            .collect(Collectors.joining("")));
}

【讨论】:

  • 感谢您的回答,但是当我从文件中放入我的行而不是这个字符串“ŁałaŁała”时,它不起作用。它显示“.a.a.a”。当我尝试将“ŁałaŁała”更改为“LalaLala”时,StringUtils 也可以正常工作,但不是来自 ANSI 文件:(
  • 尝试以这种方式读取文件(取自herereader = new BufferedReader(new InputStreamReader(new FileInputStream(&lt;file name&gt;), "Cp1252")); Java 是 utf-8 世界,所以我们必须把它弄到那里。那应该读取Windows ANSI。并继续使用 StringUtils,我想:-/ 从 GMT-1 开始进行硬核编码是不是有点晚了?
猜你喜欢
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2019-11-20
  • 2021-01-26
相关资源
最近更新 更多