powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Конвертер кодовых страниц для XML
17 сообщений из 17, страница 1 из 1
Конвертер кодовых страниц для XML
    #39806633
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Надо-б сделать что то такое.

Код: sql
1.
$ tocodepage UTF-16 --input-file=source.xml



Исходная кодовая страница детектится автоматом.

Еще варианты использования:

Код: sql
1.
$ tocodepage WIN-1251 --input-file=source.xml --output-file=dest.xml



Для множества XML-файлов с разной входной кодировкой. Все переписываем в UTF-8.
Код: sql
1.
FOR /r %%F in *.xml DO tocodepage UTF-8 "%%F"



Код: sql
1.
2.
3.
4.
5.
#!/bin/bash
for F in ./config/*
do
   tocodepage UTF-8 "$F"
done



В отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный
указатель исходной кодовой страницы.
Примеры шапок.

Код: xml
1.
<?xml version="1.0" encoding="koi8-r"?>


Шапка может (теоретически) не содержать перевод на новую строку. В этом случае можно
просто детектировать стоп-символ "?>"

Если шапки нет - то предполагается что XML-файл в кодировке UTF-8.

Если --output-file не указан - то предполагается что исходный файл будет переписан поверх.

Go-go кодить.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806858
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А чего там кодить? Есть grep и awk , чтобы достать кодировку из строки " <?xml... ". И есть iconv , чтобы перевести текстовый файл из одной кодировки в другую.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806863
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный
указатель исходной кодовой страницы.
Есть один источник XML в UTF-16 и там такой заголовок
Код: plaintext
1.
2.
3.
4.
0000000000:  3C 00 3F 00 78 00 6D 00 │ 6C 00 20 00 76 00 65 00  < ? x m l   v e
0000000010:  72 00 73 00 69 00 6F 00 │ 6E 00 3D 00 22 00 31 00  r s i o n = " 1
0000000020:  2E 00 30 00 22 00 20 00 │ 65 00 6E 00 63 00 6F 00  . 0 "   e n c o
0000000030:  64 00 69 00 6E 00 67 00 │ 3D 00 22 00 75 00 74 00  d i n g = " u t
0000000040:  66 00 2D 00 31 00 36 00 │ 22 00 3F 00 3E 00 0D 00  f - 1 6 " ? > ♪
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806868
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, то как в языке организовано хранение строк, совершенно не относится к тому, какое формат содержимого имеет файл
в C# все строки в памяти хранятся в UTF-16, если вы хотите хранить памяти в другой кодировке, используйте byte[]
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806869
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesDima T, то как в языке организовано хранение строк, совершенно не относится к тому, какое формат содержимого имеет файл
в C# все строки в памяти хранятся в UTF-16, если вы хотите хранить памяти в другой кодировке, используйте byte[]
вообще похоже, что в посте файл, я извиняюсь :) не всегда, всё соответствует спецификации 1 к 1, особенно в сторонних системах
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир П.mayton,

А чего там кодить? Есть grep и awk , чтобы достать кодировку из строки " <?xml... ". И есть iconv , чтобы перевести текстовый файл из одной кодировки в другую.
Я добавлю что мы не будем обсуждать использование grep и awk.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806959
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonВ отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный
указатель исходной кодовой страницы.
Есть один источник XML в UTF-16 и там такой заголовок
Код: plaintext
1.
2.
3.
4.
0000000000:  3C 00 3F 00 78 00 6D 00 │ 6C 00 20 00 76 00 65 00  < ? x m l   v e
0000000010:  72 00 73 00 69 00 6F 00 │ 6E 00 3D 00 22 00 31 00  r s i o n = " 1
0000000020:  2E 00 30 00 22 00 20 00 │ 65 00 6E 00 63 00 6F 00  . 0 "   e n c o
0000000030:  64 00 69 00 6E 00 67 00 │ 3D 00 22 00 75 00 74 00  d i n g = " u t
0000000040:  66 00 2D 00 31 00 36 00 │ 22 00 3F 00 3E 00 0D 00  f - 1 6 " ? > ♪

Да. Тут еще мысли.
1) BOM-заголовок? Есть или нет? Я невкурсе.
2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно
тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем
дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806971
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

Есть один источник XML в UTF-16 и там такой заголовок
Код: plaintext
1.
2.
3.
4.
0000000000:  3C 00 3F 00 78 00 6D 00 │ 6C 00 20 00 76 00 65 00  < ? x m l   v e
0000000010:  72 00 73 00 69 00 6F 00 │ 6E 00 3D 00 22 00 31 00  r s i o n = " 1
0000000020:  2E 00 30 00 22 00 20 00 │ 65 00 6E 00 63 00 6F 00  . 0 "   e n c o
0000000030:  64 00 69 00 6E 00 67 00 │ 3D 00 22 00 75 00 74 00  d i n g = " u t
0000000040:  66 00 2D 00 31 00 36 00 │ 22 00 3F 00 3E 00 0D 00  f - 1 6 " ? > ♪

Да. Тут еще мысли.
1) BOM-заголовок? Есть или нет? Я невкурсе.
Тут видно что его нет.
mayton2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно
тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем
дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке.
Да, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает.

Полистал доки С# - готовых классов нет для перекодировки XML. Разве что сначала парсить заголовок, получая исходную кодировку, а затем читать как текстовый файл и перегонять в нужную кодировку. Может в Java есть что-то подходящее.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806974
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати непонятен смысл этой конвертации в единую кодировку. Средства чтения XML заточены на конвертацию из кодировки XML в кодировку внутри ЯП. Наверно поэтому и нет того что ты ищешь, просто ненужно.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806976
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А xmllint рассматривается?
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806977
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmayton2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно
тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем
дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке.
Да, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает.

Полистал доки С# - готовых классов нет для перекодировки XML. Разве что сначала парсить заголовок, получая исходную кодировку, а затем читать как текстовый файл и перегонять в нужную кодировку. Может в Java есть что-то подходящее.
Я вижу себе такой алгоритм. По первым двум байтам мы уже можем многое сказать о документе.

Варианты.

1) UTF-16 (предположительно)
Код: sql
1.
3C 00



2) Неизвестная пока кодировка но точно-точно не UTF-16. Далее - по алгоритму читаем encoding и принимаем
решение о том какой конвертер взять. 99% это будет оди из трех Windows-1251, Utf-8, cp866 для стран СНГ.
Код: sql
1.
3C 3F



3) БОМ-шапка. Тут ничего пока не могу сказать.

https://ru.wikipedia.org/wiki/Маркер_последовательности_байтов

Я эту шапку встречал очень редко. В данной постановке я согласен ее даже проигнорировать
и посчитать двоичным файлом. Если в топике меня не убедят что этих БОМ-файлов много
и они кому-то нужны. Вобщем как Неуловимый Джо.

По сути моя задача достаточно шкурная. Она связана с массовой перекодировкой неизвестных XML в utf-8.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806986
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. SakА xmllint рассматривается?
Смотрю http://xmlsoft.org/xmllint.html

Интересно. Вроде у него есть опция --encode ENCODING
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39806988
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДа, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает.

Да помню. Типа дотнетовская сериализация максимально упрощённая. С нулевыми расходами.
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39807010
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton3) БОМ-шапка. Тут ничего пока не могу сказать
А говорить ничего не надо

Если есть маркер BOM - использовать его
mayton99% это будет оди из трех Windows-1251, Utf-8, cp866 для стран СНГ.
Если кодировка опознана - конкретная уже значения не имеет.
Или ты сам таблицы колхозишь?
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39807092
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xmllint тестирую. Есть шероховатости с UTF-16. Проверяю.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/bin/bash -v

iconv -f utf-8 -t windows-1251 probe.xml -o probe.win-1251.xml
iconv -f utf-8 -t cp866        probe.xml -o probe.cp866.xml
iconv -f utf-8 -t utf-16       probe.xml -o probe.utf-16xml

xmllint  --encode utf-8 --output 01.from.win-1251.xml probe.win-1251.xml
xmllint  --encode utf-8 --output 02.from.cp866.xml    probe.cp866.xml
xmllint  --encode utf-8 --output 03.from.utf-16       probe.utf-16xml
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39832212
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКстати непонятен смысл этой конвертации в единую кодировку. Средства чтения XML заточены на конвертацию из кодировки XML в кодировку внутри ЯП. Наверно поэтому и нет того что ты ищешь, просто ненужно.+1
...
Рейтинг: 0 / 0
Конвертер кодовых страниц для XML
    #39832265
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я помню что эту проблему для себя поднял после столкновения с fb2. Толи там кодировка не соотвествовала. Толи еще что-то было.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Конвертер кодовых страниц для XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]