Файл CSV синтаксического анализа, содержащий использование символа Unicode OpenCSV

Это зависело бы от кода. StringBuilder обычно более эффективен, но если Вы только свяжете несколько строк и сделаете все это в одной строке, оптимизация кода будет, вероятно, заботиться о нем для Вас. Важно думать о том, как код смотрит также: для больших наборов StringBuilder облегчит читать для маленьких, StringBuilder просто добавит бесполезную помеху.

16
задан Stevoisiak supports Monica 16 April 2017 в 00:48
поделиться

1 ответ

Сначала вам нужно знать, в какой кодировке находится ваш файл, например, UTF-8 или UTF-16. С чего начать создание этого файла?

После этого все относительно просто - вам нужно создать FileInputStream , обернутый в InputStreamReader , а не просто FileReader . ( FileReader всегда использует кодировку по умолчанию для системы.) Укажите кодировку для использования при создании InputStreamReader , и если вы выбрали правильный, все должно начать работать.

Обратите внимание, что вам не нужно использовать OpenCSV для проверки этого - вы можете просто прочитать текст файла самостоятельно и распечатать его. Я не уверен, что доверяю системе . out , чтобы иметь возможность обрабатывать символы, отличные от ASCII - вы можете найти другой способ проверки строк, например, распечатать отдельные значения символов как целые числа (предпочтительно в шестнадцатеричном формате), а затем сравнить их с диаграммы на unicode.org . С другой стороны, вы можете попробовать правильную кодировку и посмотреть, что произойдет вначале с ...

РЕДАКТИРОВАТЬ: Хорошо, если вы используете 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);
}

(надеюсь, у вас есть попытка / наконец блок, чтобы закрыть файл в вашем реальном коде.)

36
ответ дан 30 November 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: