我在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.

最佳答案

看起来您想将自波兰语字母到ascii的自定义映射应用于stripAccents域之外。可能您必须自己定义它,例如如下所示(仅显示“Ł”和“ł”)。

剧透:不,你不必。 Windows编码上的ansi是罪魁祸首。通过正确的解码,StringUtils.stripAccents可以正常工作。看评论。但是,如果您离开了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("")));
}

10-04 19:15