Как изменить кодировку xml файла с utf 8 на windows 1251

Обновлено: 03.07.2024

Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.

1. Опишем русскую кодировку в CPXML.Inc

2. И заставим выводить данные в windows-1251 (CpXML.clw)

DOMToXMLFile procedure(*Document doc, string path, <*CSTRING newLine>, UNSIGNED Format = Format:AS_IS)

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Но встаёт другая проблема - эти файлы не читаются кларионовским парсером (Шаблон 'View XML File' просто падает при загрузке). Ну что ж, тем хуже для парсера. Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст 'ISO-8859-1', заменим на 'WINDOWS-1251' и добавим в конец '<0>' .

4. Вопрос с документами в UTF-8 не рассматривается

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Когда получил этот результат - обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.
Но встаёт другая проблема - эти файлы не читаются кларионовским парсером (Шаблон 'View XML File' просто падает при загрузке). Ну >что ж, тем хуже для парсера. Может проблема в кодовой странице, о которой писал Сергей Артюшенков.
Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст 'ISO-8859-1', заменим на 'WINDOWS-1251' и добавим в конец '<0>' .

Я не понял, тогда в этом случае все O'K, что ли?

С уважением, Семен Попов

Когда получил этот результат - обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами. Когда получил этот результат - обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

А за это отвечает процедура CheckXMLName из CpXML.clw . Можно поставить в первую строку Return(0) - и будут приниматься любые теги

С уважением, Семен Попов

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы. Это естественно. Но сгенерированные файлы не читались через Support. Потратил время, чтобы понять причину и добить, как заставить их читаться. О чём и рассказал

По крайней мере, файлы, созданные обычным текстовым редактором или сформированные программой (в том числе без использования интерфейса) читаются, только и всего. Просто похоже, что используемая библиотека в принципе не поддерживает кодировок, отличных от буржуинских, а это самый простой путь заставить это делать.

Кстати, вместо "WINDOWS-1251" можно использовать "MS1251" - такой синтаксис тоже понимают все системы.
Этим самым экономится длина строки (ISO-8859-1 - 10 знаков, WINDOWS-1251 - 12 знаков) при бинарном рпедактировании.

Увы, это строка проверяется при вводе, а не выводе Поэтому приходится пожертвовать следующим полем - US-ASCII .

Ну, у Клариона я не проверял, к сожалению.
У меня был аналогичный случай по основной работе (программные продукты Documentum).
Мы тоже очень долго мучились с проблемой замены в бинарном файле "ISO_8859-1" на название русской кодировки. Мучились как раз из-за ттго, что нужно было уложиться "байт в байт". Проверяли все возможные варианты синтаксиса (кстати, кроме "Windows-1251" еще есть варианты "1251", "CP-1251", "ANSI-1251" и другие).
В итоге долгих экспериментов выяснилось, что "MS1251" читается даже, например, Интернет-Эксплорером.
Собственно говоря, можете проверить - замените в метатеге какой-нибудь HTML-страницы "Windows-1251" на "MS1251" - бедет работать.

Игорь Смирнов

Да речь не о Кларионе. Просто для создания DLL использовалась некая сишная библиотека. А в ней есть список допустимый кодовых таблиц, и Windows-1251 в ней НЕТ. Происходит чтение XML и поиск наименования кодовой страницы в списке. Ещё раз - это важно при ЧТЕНИИ XML-файла через кларионовский Support.

И если файл начинается на

,
то именно 'WINDOWS-1251' и должен быть в программе. Собственно, путём двухдневных хакерских "экспериментов" и был найден такой вариант.
Возможно, что можно подменить и другие текстовые строки. Кто займётся?

Кстати, попробовал CP-1251 и MS1251, браузер показал ошибку . Файл прилагается.

А вот список кодовых таблиц кириллицы из MSDN

Кстати, попробовал CP-1251 и MS1251, браузер показал ошибку .
Файл прилагается.

Действительно, выдает ошибку.
Получается, что для обычного HTML это работает, а для XML - нет.
Ну, Билл Гейтс - все запутал!

Читайте также: