繁体   English   中英

Java读取Cyrrilic CSV文件,编写奇怪的字符

[英]Java reading cyrrilic CSV file, writing strange characters

这是我的Java代码

(整个项目使用UTF-8编码)

public static ArrayList<ArrayList<String>> getCSVContent(String filepath) throws Exception { 
            CSVReader reader = new CSVReader(new FileReader(filepath));
            ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>();
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                ArrayList<String> list = new ArrayList<String>();
                for (int i = 0; i < nextLine.length; i++) {
                    list.add(nextLine[i]);
                }
                array.add(list);
            }
            reader.close();
            return array;
        }

这是我的CSV文件:

Place1  ул. "Цанко Церковски" No37  Category1   bar Bulgaria    Sofia   310-808-5243
Place 2 ул."Ген. Гурко" No 6    Category2   bar Bulgaria    Sofia   415-846-1688
Place 3 ул. "Гео Милев" No 18   Category3   bar Bulgaria    Sofia   720-318-9049

这是输出

而不是ул。 例如,“ЦанкоЦерковски” No37

我得到: , 。

它可能与CSV文件的编码有关,但是我不确定如何查看/更改它以及应该使用Word还是Open Office?

另外,是否可以更改Java读取此类文件的方式,以便即使它们使用了错误的编码,Java也可以对其进行修复?

这很可能是问题所在:

CSVReader reader = new CSVReader(new FileReader(filepath));

FileReader始终使用平台默认编码。 我更喜欢使用InputStreamReader周围包裹FileInputStream ,因为那么你可以指定编码方式:

try (InputStream stream = new FileInputStream(filepath)) {
    CSVReader reader = new CSVReader(new InputStreamReader(stream, "UTF-8"));
    ...
}

您可以像这里一样显式设置编码

new CSVReader(new InputStreamReader(new FileInputStream(filePath), encoding));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM