2015-03-16 4 views
1

В Java я создаю файл с символами Unicode.Unicode работает в Windows, но не Red Hat Linux: Java

Когда я запускаю свою программу в Windows (Jboss) и открываю файл (CSV). Он прекрасно отображает символы Unicode (норвежский и исландский) в excel.

Но когда я развертываю то же самое на сервере внутри Red Hat Linux (в Jboss той же версии), запустите программу, сгенерируйте файл и загрузите, и когда я увижу это в excel, то это искажает все символы Unicode.

Не могли бы вы предложить любую локальную настройку Linux, из-за которой Unicode искажает? или где требуется изменение?

FileWriter writer = new FileWriter(fileName); 
writer.append(new String(data.toString().getBytes("UTF-8"),"UTF-8")); 
writer.flush(); 
writer.close(); 

//data is StringBuilder type 

Я также попытался ISO8859_1

Update 1

Я проверил система кодирования: с помощью System.getProperty ("file.encoding") и обнаружили, что

окон Cp1252 и Linux - UTF-8

Обновление 2

При печати в Linux с помощью:

log.info(new String(data.toString().getBytes("UTF-8"), "UTF-8")); 

он показывает все выходные прекрасно, но когда я положил его в FileWriter с расширением filename.csv, он правильно не отображается.

+0

Вы используете шрифт unicode в своей системе linux? – ControlAltDel

+0

Я просто упоминаю UTF-8 в программе, как указано выше. при создании файла с использованием Java Coding. Тот же код отлично работает в Windows, но не в Linux? – fatherazrael

ответ

0

Похоже, вы переводите из байтов

data 

в строку

data.toString() 

байтами

data.toString().getBytes("UTF-8") 

в строку

new String(data.toString().getBytes("UTF-8"),"UTF-8")) 

байт

writer.append(new String(data.toString().getBytes("UTF-8"),"UTF-8")); 

Попробуйте только один переход от входной кодировки в строку, а затем выписывает String. Поэтому data.toString() должен знать, какую кодировку он читает. data поддерживает преобразование с разных кодовых страниц?

writer.append(data.toString(codepage)); 
+0

данные имеют тип String Builder – fatherazrael

+0

Если данные 'String', то проблема уже произошла. Вы хотите прочитать в нескольких байтах из ввода и затем преобразовать его как 'String data = new String (bytes, Charset.forName (« Cp1252 »))' –

+0

Он по-прежнему искажает символы – fatherazrael