Java阅读西里尔文CSV文件,写出奇怪的字符

时间:2013-09-02 12:28:41

标签: java csv encoding

这是我的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也会修复它?

2 个答案:

答案 0 :(得分:2)

这很可能是问题所在:

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

FileReader始终使用平台默认编码。我更喜欢使用围绕InputStreamReader的{​​{1}},因为您可以指定编码:

FileInputStream

答案 1 :(得分:2)

您可以像这里一样明确设置编码

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