0

这是我的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

我得到:��。��������, ��. ����������������������</p>

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

另外,我可以更改 Java 读取此类文件的方式,以便即使它们的编码错误,Java 也会修复它?

4

2 回答 2

2

这很可能是问题所在:

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

FileReader始终使用平台默认编码。我更喜欢使用InputStreamReader包裹 a FileInputStream,因为您可以指定编码:

try (InputStream stream = new FileInputStream(filepath)) {
    CSVReader reader = new CSVReader(new InputStreamReader(stream, "UTF-8"));
    ...
}
于 2013-09-02T12:33:05.360 回答
2

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

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

于 2013-09-02T12:34:52.870 回答