Это зависело бы от кода. StringBuilder обычно более эффективен, но если Вы только свяжете несколько строк и сделаете все это в одной строке, оптимизация кода будет, вероятно, заботиться о нем для Вас. Важно думать о том, как код смотрит также: для больших наборов StringBuilder облегчит читать для маленьких, StringBuilder просто добавит бесполезную помеху.
Сначала вам нужно знать, в какой кодировке находится ваш файл, например, 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);
}
(надеюсь, у вас есть попытка / наконец блок, чтобы закрыть файл в вашем реальном коде.)