Моя проблема заключается в следующем: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
, и вы никогда не столкнетесь с проблемами, но сейчас это не так для меня.
Как насчет использования кодировки 'UTF-8' с классом [PrintWriter] (https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html)? Он предназначен для потоков вывода текста. – AndrewMcCoist
Что такое вывод 'echo $ LC_CTYPE'? – Andreas
При использовании Notepad ++ убедитесь, что в раскрывающемся меню «Кодировка» указано «UTF-8 без спецификации». * (это то, что должно быть на Windows в любом случае, если версия Linux похожа) * – Andreas