Юникод работает на Windows, но не на Red Hat Linux: Java

1

В Java я создаю файл с символами Unicode.

Когда я запускаю свою программу в 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

Обновление 1

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

Windows - Cp1252, а Linux - UTF-8

Обновление 2

Когда я печатаю в Linux, используя:

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

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

  • 0
    Вы используете шрифт Unicode в вашей системе Linux?
  • 0
    Я просто упоминаю UTF-8 в программе, как указано выше. при создании файла с использованием Java Coding. Тот же код работает нормально в Windows, но не в Linux?
Теги:
unicode
jboss

1 ответ

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
  • 0
    Если data - String , то проблема уже возникла. Вы хотите прочитать несколько байтов из входных данных и затем преобразовать их как String data = new String(bytes, Charset.forName("Cp1252"))
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню