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