|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Привет. Надо-б сделать что то такое. Код: sql 1.
Исходная кодовая страница детектится автоматом. Еще варианты использования: Код: sql 1.
Для множества XML-файлов с разной входной кодировкой. Все переписываем в UTF-8. Код: sql 1.
Код: sql 1. 2. 3. 4. 5.
В отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный указатель исходной кодовой страницы. Примеры шапок. Код: xml 1.
Шапка может (теоретически) не содержать перевод на новую строку. В этом случае можно просто детектировать стоп-символ "?>" Если шапки нет - то предполагается что XML-файл в кодировке UTF-8. Если --output-file не указан - то предполагается что исходный файл будет переписан поверх. Go-go кодить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:59 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
mayton, А чего там кодить? Есть grep и awk , чтобы достать кодировку из строки " <?xml... ". И есть iconv , чтобы перевести текстовый файл из одной кодировки в другую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 15:16 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
maytonВ отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный указатель исходной кодовой страницы. Есть один источник XML в UTF-16 и там такой заголовок Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 15:23 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Dima T, то как в языке организовано хранение строк, совершенно не относится к тому, какое формат содержимого имеет файл в C# все строки в памяти хранятся в UTF-16, если вы хотите хранить памяти в другой кодировке, используйте byte[] ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 15:28 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Roman MejtesDima T, то как в языке организовано хранение строк, совершенно не относится к тому, какое формат содержимого имеет файл в C# все строки в памяти хранятся в UTF-16, если вы хотите хранить памяти в другой кодировке, используйте byte[] вообще похоже, что в посте файл, я извиняюсь :) не всегда, всё соответствует спецификации 1 к 1, особенно в сторонних системах ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 15:29 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Владимир П.mayton, А чего там кодить? Есть grep и awk , чтобы достать кодировку из строки " <?xml... ". И есть iconv , чтобы перевести текстовый файл из одной кодировки в другую. Я добавлю что мы не будем обсуждать использование grep и awk. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 15:43 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Dima TmaytonВ отличие от прочих текстовых файлов нам известно что шапка XML идёт в ASCII и содержит явный указатель исходной кодовой страницы. Есть один источник XML в UTF-16 и там такой заголовок Код: plaintext 1. 2. 3. 4.
Да. Тут еще мысли. 1) BOM-заголовок? Есть или нет? Я невкурсе. 2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 18:43 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
maytonDima Tпропущено... Есть один источник XML в UTF-16 и там такой заголовок Код: plaintext 1. 2. 3. 4.
Да. Тут еще мысли. 1) BOM-заголовок? Есть или нет? Я невкурсе. Тут видно что его нет. mayton2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке. Да, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает. Полистал доки С# - готовых классов нет для перекодировки XML. Разве что сначала парсить заголовок, получая исходную кодировку, а затем читать как текстовый файл и перегонять в нужную кодировку. Может в Java есть что-то подходящее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:05 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Кстати непонятен смысл этой конвертации в единую кодировку. Средства чтения XML заточены на конвертацию из кодировки XML в кодировку внутри ЯП. Наверно поэтому и нет того что ты ищешь, просто ненужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:12 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
А xmllint рассматривается? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:14 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Dima Tmayton2) Для UTF-16 шапка xml будет содержать явную последовательность чередующихся нулей. В принципе можно тоже детектировать. Тогда атрибут encoding="UTF-16" уже не имеет значения. Мы и так знаем с чем имеем дело. Хотя в практике я очень редко встречал файлы сохранённые именно в двух-байтной кодировке. Да, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает. Полистал доки С# - готовых классов нет для перекодировки XML. Разве что сначала парсить заголовок, получая исходную кодировку, а затем читать как текстовый файл и перегонять в нужную кодировку. Может в Java есть что-то подходящее. Я вижу себе такой алгоритм. По первым двум байтам мы уже можем многое сказать о документе. Варианты. 1) UTF-16 (предположительно) Код: sql 1.
2) Неизвестная пока кодировка но точно-точно не UTF-16. Далее - по алгоритму читаем encoding и принимаем решение о том какой конвертер взять. 99% это будет оди из трех Windows-1251, Utf-8, cp866 для стран СНГ. Код: sql 1.
3) БОМ-шапка. Тут ничего пока не могу сказать. https://ru.wikipedia.org/wiki/Маркер_последовательности_байтов Я эту шапку встречал очень редко. В данной постановке я согласен ее даже проигнорировать и посчитать двоичным файлом. Если в топике меня не убедят что этих БОМ-файлов много и они кому-то нужны. Вобщем как Неуловимый Джо. По сути моя задача достаточно шкурная. Она связана с массовой перекодировкой неизвестных XML в utf-8. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:16 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Alexander A. SakА xmllint рассматривается? Смотрю http://xmlsoft.org/xmllint.html Интересно. Вроде у него есть опция --encode ENCODING ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:54 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Dima TДа, это экзотика. У меня только один упоротый клиент такое дал и сказал что получай или так или никак. Но C# такое переваривает. Да помню. Типа дотнетовская сериализация максимально упрощённая. С нулевыми расходами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 19:57 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
mayton3) БОМ-шапка. Тут ничего пока не могу сказать А говорить ничего не надо Если есть маркер BOM - использовать его mayton99% это будет оди из трех Windows-1251, Utf-8, cp866 для стран СНГ. Если кодировка опознана - конкретная уже значения не имеет. Или ты сам таблицы колхозишь? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 21:05 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
xmllint тестирую. Есть шероховатости с UTF-16. Проверяю. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2019, 01:07 |
|
Конвертер кодовых страниц для XML
|
|||
---|---|---|---|
#18+
Dima TКстати непонятен смысл этой конвертации в единую кодировку. Средства чтения XML заточены на конвертацию из кодировки XML в кодировку внутри ЯП. Наверно поэтому и нет того что ты ищешь, просто ненужно.+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 12:19 |
|
|
start [/forum/topic.php?fid=16&fpage=9&tid=1339928]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 259ms |
total: | 414ms |
0 / 0 |