Создание допустимого XML с Java и кодировкой UTF-8

21
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

Используйте FileOutputStream, а не FileWriter.

последний применяет его собственное кодирование, которое является почти наверняка не UTF-8 (в зависимости от Вашей платформы, это - вероятно, Windows 1252 или IS-8859-1).

Редактирование (теперь, когда у меня есть некоторое время):

XML-документу без пролога разрешают быть закодированным как UTF-8 или UTF-16. С прологом это iss позволил определять свое кодирование (пролог может содержать только символы US-ASCII, таким образом, пролог всегда читаем).

Читатель А имеет дело с символами; это будет декодировать поток байтов базового InputStream. В результате при передаче Читателя синтаксическому анализатору Вы говорите ему, что уже обработали кодирование, таким образом, синтаксический анализатор проигнорирует пролог. Когда Вы передаете InputStream (который читает байты), он не делает это предположение и будет смотреть на пролог для определения кодирования - или значение по умолчанию к UTF-8/UTF-16, если это не там.

я никогда не пытался читать файл, который кодируется в UTF-16. Я подозреваю, что синтаксический анализатор будет искать Порядок байтов Mark (BOM) как первые 2 байта файла.

31
ответ дан 29 November 2019 в 20:55
поделиться

Ну, конечно, 0xFC и 0xF6 не являются действительными UTF-8 символами. Они должны были быть ограничены двумя байтовыми последовательностями: 0x3CBC и 0x3CB6.

Скорее всего, проблема заключается в том, что первоначальный источник символов определяется как UTF-8, а они нет.

5
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: