Неправильная кодировка, отображаемая в notepad при открытии xml, написанного с использованием XMLStreamWriter в java

#java #encoding

#java #кодирование

Вопрос:

Столкнулся со странной проблемой. У меня есть приложение на Java, которое записывает данные в XML-файл. Это приложение является частью более крупного проекта и имеет несколько зависимостей. Когда я открываю XML-файл в notepad , выделяется неправильная кодировка. Это минимально воспроизводимый пример:

  public static void main(String[] args) throws IOException, XMLStreamException {
     OutputStream ostream;
     XMLStreamWriter writer;
     Path path = Paths.get("C:/encodingissue/711.xml");
    ostream = Files.newOutputStream(path);
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
    writer = xmlOutputFactory.createXMLStreamWriter(ostream,  "ISO-8859-1");
    writer.writeStartDocument("ISO-8859-1", "1.0");
      writer.writeStartElement("county");
      writer.writeCharacters("bærum");
      writer.writeEndElement(); 
      writer.close();
      ostream.close();
}
 

Странно то, что несколько дней назад была вырезана новая ветка. Когда я выполняю приведенный выше код в старой ветке, проблем нет. Notepad показывает ISO-8859. Я сравнил код с предыдущей веткой. никаких изменений нет. Есть идеи, в чем может быть проблема? потратьте 2 дня, без подсказки..
введите описание изображения здесь

неправильная кодировка: введите описание изображения здесь

Комментарии:

1. Что такое ENCODING ? И как Notepad может сказать, что кодировка неверна, если файл содержит только простые символы ASCII?

2. Отредактировано @tgdavies, произошла опечатка. когда я говорю «блокнот», я имею в виду, что notepad выделяет кодировку . она должна соответствовать той, которую мы предоставляем в коде Java.

3. Я вижу изменение двойных кавычек на одинарный апостроф для атрибутов XML. Вероятно, синтаксический анализ кодировки не может справиться с одним апострофом. В любой момент связи. Возможно, Notepad ожидает только двойные кавычки. Попробуйте веб-браузер.

4. «ANSI» — в лучшем случае вводящее в заблуждение название кодировки, а в худшем — бесполезное. В основном: Notepad пытается угадать кодировку и может получить или не получить ее правильно. Если это ваша единственная проблема с результирующим выводом, я бы настоятельно рекомендовал вам игнорировать ее, потому что, вероятно, это просто алгоритм обнаружения кодировки Notepad , который выдает немного шаткие результаты из-за использования другого набора кавычек. Но ни в одном из файлов нет ничего неправильного. Если у вас действительно есть реальная проблема (не связанная с тем, что Notepad показывает там), пожалуйста, опишите это.

5. @Parameswar: Опять же, Notepad не является авторитетным источником для кодирования чего-либо. Это предположение (конечно, с некоторыми не ужасными алгоритмами, но все же). Любой правильный анализатор XML (используемый правильно) правильно проанализирует XML, созданный вашим примером кода. Это должно быть единственным релевантным условием для создания правильного XML. Все остальное — выдуманное культовое программирование и непонимание базовой технологии.