Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.11.09;
Скачать: [xml.tar.bz2];

Вниз

"Проблема" кодировками в XML   Найти похожие ветки 

 
sniknik ©   (2014-03-27 14:05) [0]

Смысл, есть xml странной структуры, не наша, но нам(мне) нужно ее заполнить и отправить "владельцу". Странность в том, что в тегах одной xml-и "лежат" другие, а проблема в том, что у "родителя" кодировка utf8, а у вложенных win1251... в принципе, все было хорошо, пока в данных вложенных не появились русские слова... понятно в общем.
Вот пример

<?xml version = "1.0" encoding = "UTF-8"?>
<tag>
<![CDATA[
<?xml version="1.0" encoding="windows-1251"?>
<tag>Тест русские символы</tag>
]]>
</tag>


И вопрос, можно ли что нибудь с этим сделать? Ну в смысле не в base64/другие транспортные кодировать, а получателя заставить раскодировать... это не возможно (не будут ничего менять). А вот так чтобы стандартными средствами (ie чтобы открывал), типа как раздел CDATA заставляет игнорировать разметку в нем, так же чем нибудь заставить не выдавать ошибку "неверный символ" если внутри CDATA текст в отличной от "родителя" кодировки (раздел BINARYDATA бы подошeл ;)).

p.s. надежды на решение почти нет... вопрос чисто на всякий случай, а вдруг, чтобы сказать "я сделал все что мог" :), перед тем как отказывать.


 
Дмитрий СС   (2014-03-27 14:22) [1]

Не совсем понятно чего добиться то нужно? Чтобы IE открывал? Или файл подготовить корректно?

У меня была похожая проблема с ISD, когда она 1251 XML-ку передавали через UTF-ный SOAP.
Я "пошаманил" со всякими UTFEncode/Decode и в итоге добился результата.
Но задачи открывать в IE не стояло, конечно, но и возможности отказаться не было.


 
имя   (2014-03-27 14:28) [2]

Удалено модератором


 
имя   (2014-03-27 14:32) [3]

Удалено модератором


 
sniknik ©   (2014-03-27 14:34) [4]

> Не совсем понятно чего добиться то нужно? Чтобы IE открывал?
Фактически да, ie откроет значит все пройдет. Т.к. читают содержимое тегов стандартным IDOM документом.

> Или файл подготовить корректно?
С точки зрения "бизнеса" файл корректен, именно в том виде, что нужен. Проблема в "технике" которая так не считает.

> Я "пошаманил" со всякими UTFEncode/Decode и в итоге добился результата.
Ты маладец, только читать не умеешь...
> не в base64/другие транспортные кодировать, а получателя заставить раскодировать... это не возможно

Структура/кодировка каждой части должна остаться, что есть, они идут в разные места, и каждый хочет "по своему". Нужен метод записать так чтобы в чтении ничего не менять (не наша часть). но тем не менее прочиталось то что нужно.


 
sniknik ©   (2014-03-27 15:02) [5]

> и уже результирующий XML парсишь
Парсинг/чтение менять нельзя. Он не в моих руках. Только составление/запись.

> Можно вообще изменить декларацию на кодировку utf16 - и не париться
Нет нельзя, внутренняя часть тогда тоже будет в ней, а там явно указано, и должно быть win1251.


 
имя   (2014-03-27 15:06) [6]

Удалено модератором


 
sniknik ©   (2014-03-27 15:14) [7]

> ну дак переконверти отдаваемую CDATA строку в windows-1251. Что сложного то?
А ты открой в ie/... пример из [0] увидишь что. Он в исходных именно в 1251, без переконвертаций.


 
Дмитрий СС   (2014-03-27 15:17) [8]


> Ты маладец, только читать не умеешь...

Ну удачи вам


 
Inovet ©   (2014-03-27 15:25) [9]

> [7] sniknik ©   (27.03.14 15:14)
> Он в исходных именно в 1251, без переконвертаций.

Может, Профессор про предварительную конвертацию напильником в тегах

<![CDATA[
<?xml version="1.0" encoding="windows-1251"?>
<tag>Тест русские символы</tag>
]]>

в UTF-8. Ну, как бы файл должен быть в одной кодировке, а потом уже обратно напильником. в windows-1251.


 
clickmaker ©   (2014-03-27 15:25) [10]

> А ты открой в ie/...

а на фига открывать заведомо кривой хмл в ие?


 
имя   (2014-03-27 15:45) [11]

Удалено модератором


 
sniknik ©   (2014-03-27 16:00) [12]

> а потом уже обратно напильником. в windows-1251.
Если бы напильник был у меня в руках, а так... Я тут только потому, что работать перестало (понятно почему, пока в названиях был только английский текст, все эти заголовки были не существенны)

> а на фига открывать заведомо кривой хмл в ие?
Для проверки... если удастся как-то "соблюсти" и открыть то за задание можно браться, если нет... ну на нет и суда нет.

> Согласно правилам XML там лежат русские символы в кодировке utf8
Вопрос не о правилах, я их и сам знаю, и доки по ним есть, а о том можно ли их обойти.


 
Inovet ©   (2014-03-27 16:03) [13]

Скопировал из [0] в файл 1.xml в кодировке UTF-8. Всё открылось... Так что напильник помогает.


 
Inovet ©   (2014-03-27 16:04) [14]

> [12] sniknik ©   (27.03.14 16:00)
> Если бы напильник был у меня в руках, а так...

А, вон как оно.


 
имя   (2014-03-27 16:18) [15]

Удалено модератором


 
sniknik ©   (2014-03-27 17:02) [16]

> посмотрим, чё у тебя там за символы
[0]


 
имя   (2014-03-27 17:07) [17]

Удалено модератором


 
sniknik ©   (2014-03-27 17:14) [18]

> все символы windows-1251 без всяких UTF-8 и BOM
Именно так и должно быть 1251, для внутреннего, а для внешнего в utf-8. Условие такое. "ТЗ".

Файла нет. Его нужно сделать и отправить... правила определены "бизнесом" (который уверен, что xml универсален, понимается это ими так, что пихать туда можно что угодно и как угодно "он умный, он поймет", ну и + "всегда работало именно с такими заголовками").

Сможешь "извернуться"? Могу свести с заказчиком, денег заработаешь... (не за xml, задача обширнее, xml это "камень преткновения") платят обычно нормально. Сколько за эту еще не знаю, на первом знакомстве с ТЗ остановился.


 
sniknik ©   (2014-03-27 17:18) [19]

Работало вот так, тоже формировали "типа в 1251" (с браузера пойдет) -
<?xml version = "1.0" encoding = "UTF-8"?>
<tag>
<![CDATA[
<?xml version="1.0" encoding="windows-1251"?>
<tag>Test russian symbols</tag>
]]>
</tag>


 
имя   (2014-03-27 17:22) [20]

Удалено модератором


 
sniknik ©   (2014-03-27 17:37) [21]

Удалено модератором


 
имя   (2014-03-27 17:45) [22]

Удалено модератором


 
sniknik ©   (2014-03-27 18:20) [23]

Не пойдет на устройство "ушла" строка "Тест СЂСѓСЃСЃРєРёРµ символы</"


 
имя   (2014-03-27 18:23) [24]

Удалено модератором


 
clickmaker ©   (2014-03-27 18:24) [25]

> [23] sniknik ©   (27.03.14 18:20)

так а какие варианты? как может быть в одном файле текст в 2 разных кодировках, чтобы при этом он нормально читался без перекодирования?


 
sniknik ©   (2014-03-27 18:28) [26]

+
При расширении (добавлении тега c русским) в "основной" xml в ответ та же ошибка - "неверный символ" но уже на этот тег.

Добавленный BOM не панацея в общем.


 
sniknik ©   (2014-03-27 18:32) [27]

> как может быть в одном файле текст в 2 разных кодировках, чтобы при этом он нормально читался без перекодирования?
Ну например команда вместо CDATA типа BYNARY(150, "и тут 150 байт чего угодно .... "). Если бы была.

Да понятно все в общем, спрашивал все одно на "а вдруг?", но чудес не бывает ;(.


 
clickmaker ©   (2014-03-27 18:34) [28]

> команда вместо CDATA типа BYNARY

такая "команда" называется base64


 
sniknik ©   (2014-03-27 18:39) [29]

> такая "команда" называется base64
Блин, это я первым делом предложил. Нельзя, "та сторона"  рас-кодировки не делает. (софт не русский, и очень старый, те кто писал похоже вообще не знали ничего кроме английского)


 
sniknik ©   (2014-03-27 18:45) [30]

> тогда у вас неправильный парсер
> попробуй так
> http://gfile.ru/a85iu
Парсер не у меня, с первого поста об этом твержу, был бы мой проблем не было (я бы вообще всю xml по другому сделал, без вложенных).

Тоже не работает, с почти той же ошибкой "недопустимый знак" (а не символ :)).


 
Inovet ©   (2014-03-27 18:55) [31]

> [30] sniknik ©   (27.03.14 18:45)
> Тоже не работает

Осталось в качестве эксперимента проверить на предмет понимания русскости вообще. Замени в заголовке

> [30] sniknik ©   (27.03.14 18:45)
> http://gfile.ru/a85iu

UTF-8 на windows-1251


 
это все...   (2014-03-27 20:02) [32]

Фактически да, ie откроет значит все пройдет. Т.к. читают содержимое тегов стандартным IDOM документом.

В чем тогда проблема?

внутри документа и внутри cdata - все в утф-8
в прологе документа - утф-8

или

внутри документа и внутри cdata - все в 1251
в прологе документа - 1251

в псевдо-прологе вложенного в cdata документа - то, чего они попросят.

ие такой документ откроет на ура. задача решена.

PS
Вангуя могу еще такое сказать:

Загрузив основной док, который будет такой как описано выше, они дернут содержимое CDATA в стоку
а потом сделают на ней loadXML()

так вот.
кодировка в прологе в этом случае вообще нафик не сдалась и ее можно опустить.
и не только ее но и сам пролог тоже.

достаточно будет самого тела.
<root>......</root>


 
это все...   (2014-03-27 20:13) [33]

в качестве иллюстрации примеры:

xdoc := CoDomDocument.create;
xdoc.loadXML("<мама_мыла_раму/>");
xdoc.save("c:\utf8-default.xml");

xdoc.loadXML("<xml version="1.0" encoding="windows-1251"?><мама_мыла_раму/>");
xdoc.save("c:\1251-explicit.xml");

xdoc.loadXML("<xml version="1.0" encoding="utf-8"?><мама_мыла_раму/>");
xdoc.save("c:\utf-8-explicit.xml");

затем far + f3 для всех трех файлов и смотрим что выгрузилось
1-утф
2-1251
3-утф


 
имя   (2014-03-27 21:18) [34]

Удалено модератором


 
это все...   (2014-03-27 21:27) [35]

уберите пролог документа из cdata вообще.
или уберите только кодировку из него.


 
sniknik ©   (2014-03-28 08:08) [36]

> Замени в заголовке
>> [30] sniknik ©   (27.03.14 18:45)
>> http://gfile.ru/a85iu
> UTF-8 на windows-1251
Работает.

> В чем тогда проблема?
Читай сначала. сверху должен быть utf-8 внутри 1251, реальные, и никак иначе, именно в таком виде действительна первая проверка в ie. все остальные варианты "корявят" русский текст (выше есть), или дают ошибку (начало).

> Очевидно в одном из элементов цепи преобразований есть ошибка, противоречащая правилам XML.
Очевидно. Я эту ошибку с самого начала описал. Сам "стиль" формирования ошибочен.

> в каком виде получаешь данные
НЕ получаю. Только ОТПРАВЛЯЮ. Сколько раз одно и то же? Считай получателем "черный ящик" (что не далеко от истины).

> Но я сомневаюсь, что ты справишься с задачей описания достойно :)
Я на задачу "не подписался", т.что пофиг.

> уберите пролог документа из cdata вообще.
> или уберите только кодировку из него.
по умолчанию подставляется utf-8. ну или что-то подобное, т.к. убирание у "внутреннего" возвращает туже ошибку (не верный символ в строке ...), а у внешнего, результат читается, но все русские буквы замещаются знаками вопросов.


 
sniknik ©   (2014-03-28 08:18) [37]

> уберите пролог документа из cdata вообще.
> или уберите только кодировку из него.
+
Еще странность, если убрать у "внешнего" весь заголовок - <?xml version = "1.0" encoding = "UTF-8"?>, то открытие "тупит" по страшному почему то, т.е. с ним открывает за секунду, а без ~ 5 мин...
Забавно.


 
это все ...   (2014-03-28 08:29) [38]

Удалено модератором


 
sniknik ©   (2014-03-28 09:35) [39]

> кроме этого там сказано, что если ие проглотит документ, то будет все ок.
Там сказано "фактически да если ie откроет ...", но сказано не в вакууме, а после перечисления условий которые никто не отменял.

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


 
имя   (2014-03-28 10:02) [40]

Удалено модератором



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2014.11.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.01 c
15-1396211403
Юрий
2014-03-31 00:30
2014.11.09
С днем рождения ! 31 марта 2014 понедельник


15-1396291606
TidSSL
2014-03-31 22:46
2014.11.09
Смотрелка фотографий для андроид?


3-1300996686
федя
2011-03-24 22:58
2014.11.09
Нормализация банковского счета


15-1395914708
sniknik
2014-03-27 14:05
2014.11.09
"Проблема" кодировками в XML


2-1383865372
Drowsy
2013-11-08 03:02
2014.11.09
Ищу компонент типа "линии-выноски на чертеже".





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский