Моя проблема заключается в следующем:
Возникла проблема с кодировкой символов при записи в текстовый файл. Проблема в том, что символы не показывают предполагаемое значение. например, я пишу ' '(вероятно, это символ табуляции), а 'Â' - это то, что отображается в текстовом файле.
Исходная информация
Эти данные хранятся в базе данных MSQL. Сортировка базы данных — SQL_Latin1_General_CP1_CI_AS
, а поля — varchar
. Я пришел, чтобы изучить сопоставление и тип, чтобы определить, какая кодировка символов используется на стороне базы данных. Значения хранятся правильно, поэтому здесь нет проблем.
Мое приложение 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
, а echo $LC_CTYPE` ничего не печатает.
Вот что я пытался до сих пор. Я попытался изменить кодировку символов, используемую OutputStreamWriter. Я пробовал UTF-8 и CP1252. При переключении кодировки некоторые символы фиксируются, тогда как другие неправильно отображаются.
Мой вопрос таков: какую кодировку должен использовать мой OutputStreamWriter? (Дополнительные вопросы) как нам избежать подобных проблем. Мне дали эмпирическое правило: используйте
UTF-8
, и вы никогда не столкнетесь с проблемами, но сейчас это не относится ко мне.
UTF-8
с классом PrintWriter ? Он предназначен для потоков вывода текста. - person AndrewMcCoist   schedule 15.10.2015echo $LC_CTYPE
? - person Andreas   schedule 15.10.2015PrintWriter
, но он наследуется отWriter
, который я использую - person Marquis Blount   schedule 15.10.2015hd
, чтобы определить, что выводится? - person Tassos Bassoukos   schedule 15.10.2015hd
- person Marquis Blount   schedule 15.10.2015hd
— команда шестнадцатеричного дампа; он показывает шестнадцатеричные значения символов в файле. - person Tassos Bassoukos   schedule 15.10.2015