2015-10-14 5 views
0

Моя проблема заключается в следующем:Java Кодировка символов Запись в текстовый файл

Имея проблемы с кодировкой символов при записи в текстовый файл. Проблема заключается в том, что символы не отображают предполагаемое значение. например, я пишу '' (что, вероятно, является символом Tab), а 'Â' - это то, что отображается в текстовом файле.

Справочная информация

Эти данные хранятся в базе данных Msql. Сопоставление базы данных - SQL_Latin1_General_CP1_CI_AS, а поля - varchar. Я пришел, чтобы узнать, что сортировка и тип определяют, какая кодировка символов используется на стороне базы данных. Значения хранятся правильно, поэтому никаких проблем здесь нет.

Приложение My Java запускает запросы, чтобы вытащить данные из БД, и это тоже выглядит нормально. Я отлаживал код и видел, что все строки имеют правильное представление перед записью в файл.

Далее я пишу текст в файл .TXT, используя OutputStreamWriter следующим образом:

public OfferFileBuilder(String clientAppName, boolean isAppend) throws IOException, URISyntaxException { 
     String exportFileLocation = getExportedFileLocation(); 
     File offerFile = new File(getDatedFileName(exportFileLocation+"/"+clientAppName+"_OFFERRECORDS")); 
     bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(offerFile, isAppend), "UTF-8")); 
    } 

Теперь, как только я открываю файл на сервере Linux, запустив cat команды на файл или открыть файл с помощью notepad ++ некоторые из символов отображаются неправильно.

Я побежал следующие команды на сервере, чтобы увидеть его кодировку locale charmap которая печатает UTF-8, echo $LANG, который печатает en_US.UTF-8 и не эхо $ LC_CTYPE` печатает ничего.

Вот что я пытался сделать до сих пор. Я попытался изменить кодировку символов, используемую OutputStreamWriter. Я пробовал UTF-8 и CP1252. При переключении кодирования некоторые символы фиксируются, когда другие отображаются неправильно.

Мой вопрос: Какую кодировку должен использовать мой OutputStreamWriter? (Бонусные вопросы), как мы должны избегать подобных ситуаций. Правило большого пальца i было предоставлено, было использование UTF-8, и вы никогда не столкнетесь с проблемами, но сейчас это не так для меня.

+0

Как насчет использования кодировки 'UTF-8' с классом [PrintWriter] (https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html)? Он предназначен для потоков вывода текста. – AndrewMcCoist

+0

Что такое вывод 'echo $ LC_CTYPE'? – Andreas

+0

При использовании Notepad ++ убедитесь, что в раскрывающемся меню «Кодировка» указано «UTF-8 без спецификации». * (это то, что должно быть на Windows в любом случае, если версия Linux похожа) * – Andreas

ответ

0

работает file -bi команду на сервере показал, что файл был зашифрован с ascii вместо utf8. Полностью удалив файл и перезапустив процесс, я исправил это для меня.

Смежные вопросы