Ответ 1
Сначала вам нужно знать, что такое кодировка вашего файла, например UTF-8 или UTF-16. С чего начинается этот файл?
После этого это относительно просто - вам нужно создать FileInputStream
, завернутый в InputStreamReader
, а не только FileReader
. (FileReader
всегда использует кодировку по умолчанию для системы.) Укажите кодировку, которая будет использоваться при создании InputStreamReader
, и если вы выбрали правильный, все должно начать работать.
Обратите внимание, что вам не нужно использовать OpenCSV, чтобы проверить это - вы можете просто прочитать текст файла самостоятельно и распечатать все. Я не уверен, что я бы доверял System.out
, чтобы иметь возможность обрабатывать символы, отличные от ASCII, хотя, возможно, вы захотите найти другой способ изучения строк, например, распечатать отдельные значения символов в виде целых чисел (предпочтительно в шестнадцатеричном формате), а затем сравнивая их с диаграммами на unicode.org. С другой стороны, вы можете попробовать правильную кодировку и посмотреть, с чего начать...
EDIT: Хорошо, поэтому, если вы используете UTF-8:
CSVReader reader=new CSVReader(
new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"),
',', '\'', 1);
String[] line;
while ((line = reader.readNext()) != null) {
StringBuilder stb = new StringBuilder(400);
for (int i = 0; i < line.length; i++) {
stb.append(line[i]);
stb.append(";");
}
System.out.println(stb);
}
(Надеюсь, у вас есть блок try/finally, чтобы закрыть файл в вашем реальном коде.)