Просмотр полной версии : Кодировка XML
Что-то непонятно, новая фича XML в AS3 игнорирует кодировку загружаемого XML, что ли?
XML.ignoreProcessingInstructions = false;
не помогает.
Какую бы кодировку я не писал бы в <?xml version="1.0" encoding="windows-1251"?>, всё равно при загрузке она весь текст внутри считает за UTF-8, и выводит всё в контролки соответственно (то есть, если текст в windows-1251, то в контролки выводятся крякозябры).
Кто-нибудь знает, как можно в переменную типа XML загрузить простой файл в кодировке windows-1251, например:
<?xml version="1.0" encoding="windows-1251">
<root>
<text>
Русский текст
</text>
</root>
?
DRAGOnoid
20.01.2008, 00:05
<?xml version="1.0" encoding="UTF-8">
причём весь текст внутри тоже должен быть в этой кодировки а не в windows.
Само содержимое файла должно быть в этой кодировке. Указанная в заголовке файла кодировка лишь помогает определить кодировку файла, а не сделать её таковой.
Вообще-то я и сам в курсе, что текст в файле должен быть в той же кодировке, что прописана в processing instructions. Вопрос был не об этом.
Смысл в том, что независимо от значения кодировки в processing instructions флэш кладет в свои переменные текст в кодировке, как она была в текстовом файле, без преобразования во внутренний формат. То есть, если файл XML в windows-1251, то текст в переменной, судя по всему, будет тоже в windows-1251, и, соответственно, при выводе куда-нить в контролку, будет отображен в виде крякозябр.
И наоборот, если текст в XML в UTF-8, а в processing instructions я прописал windows-1251, то флэшу на это наплевать. Он прочитает текст, как он есть, в переменных будет текст в UTF-8, соответственно, они прекрасно выведутся в контролки.
Есть авторитетные мнения по существу вопроса?
Кодировка — только utf-8. Какие ещё у вас вопросы по этому поводу?
BlooDHounD
21.01.2008, 23:33
ни один текстовый редатор вам не будет читать инструкции :) он прсто с ними сверится :) инструкции это запись о том в каком виде надо читать. если вы записали 1251, а в инструкциях ютф прописали, то большенство вам попробует прочитать файв в ютф. само сабой вы получите иероглифы.
Кодировка — только utf-8. Какие ещё у вас вопросы по этому поводу?
Вот по этому и вопросы. Нахрена в XML предусмотрены processing instructions и возможность указать кодировку, если Flash, с его A4X не поддерживает ничего, кроме UTF-8?
И хотелось бы знать, где-то об этом написано официально? имеется в виду, о том, что флэш умеет читать только XML в кодировке UTF-8.
А вообще - проблема вовсе не высосана из пальца. Мне rss2 выдает XML в кодировке windows-1251. И в нем честно написано encoding="windows-1251". Флэш прекрасно читает её, а вывести куда-нить русский текст не может.
Как теперь флэшем читать RSS-фиды в кодировке, отличной от windows-1251?
В хелпе.
Вы вообще в курсе, что XML разрабатывался не только для флеша?
В хелпе.
Вы вообще в курсе, что XML разрабатывался не только для флеша?
В курсе. Не понимаю, почему так трудно было поддержать XML нормально. Впрочем, ладно, как сделали, так сделали.
А вообще - проблема вовсе не высосана из пальца. Мне rss2 выдает XML в кодировке windows-1251. И в нем честно написано encoding="windows-1251". Флэш прекрасно читает её, а вывести куда-нить русский текст не может.
Как теперь флэшем читать RSS-фиды в кодировке, отличной от UTF-8?
Нет никакого смысла поддерживать всяческие левые кодировки, типа win1251, когда есть принятый безглючный и универсальный стандарт utf-8.
То, что фиды идут в виндовой кодировке — проблема того, кто этот фид слепил.
Если очень надо, можно прочитать различные кодировки через ByteArray, но я бы этим занимался в самом крайнем случае.
DRAGOnoid
21.01.2008, 23:53
чё то у меня дежавю
http://flasher.ru/forum/showthread.php?t=92301&page=14&highlight=NetStr%2A
наглядный пример глючности Фида
Нет никакого смысла поддерживать всяческие левые кодировки, типа win1251, когда есть принятый безглючный и универсальный стандарт utf-8.
То, что фиды идут в виндовой кодировке — проблема того, кто этот фид слепил.
Если очень надо, можно прочитать различные кодировки через ByteArray, но я бы этим занимался в самом крайнем случае.
Про смысл можно поспорить, всё-таки для русского текста UTF-8 занимает в 2 раза больше места. :)
Но не буду, потому что вопрос прояснен. Большое спасибо за помощь :)
Я столкнулся с такой же проблемой. Решил я ее так: открыл Dw CS3 и отредактировал и сохранил файл ХМЛ и в итоге все работало. Конечно, с научной точки зрения я толком не понимаю в чем разница (хотя хотелось бы :(, но тут важен был результат.
†‡Paladin‡†
27.01.2008, 16:10
Про смысл можно поспорить, всё-таки для русского текста UTF-8 занимает в 2 раза больше места. :)
O RLY? А я думал кодировка называется UTF-8, т.к. на 1 символ тратится 8 бит.
BlooDHounD
27.01.2008, 18:41
†‡Paladin‡†, в UTF-8 зашита половина алфавитов мира. точнее все кроме иероглифов, которые включены в кодировку UTF-16. давайте посчитаем: в одном байте мы можем зашить один из 256 различных символов ... интересно как в это 256 включить хотябы полную латиницу (548 символов), или хотя бы полную крилицу (499 символов).
и того получаем минимум 2 байта.
на самом деле символ в UTF-8 имеет динамическую длинну.
читаемм: http://ru.wikipedia.org/wiki/UTF-8
В общем так и не ответили как прописать в xml фале кодировку чтобы русский текст не писал иероглифами...
Или все же решили этот вопрос?
Был бы очень благодарен если пришлете с решением исходник.
За ранее благодарю!
dimakol@mail.ru
В общем так и не ответили как прописать в xml фале кодировку чтобы русский текст не писал иероглифами...
Или все же решили этот вопрос?
Файл сохранить нужно в utf-8. А от того, что вы в нем что-то пропишите, кодировка не изменится.
Вот посмотрите пожалуйста исходник первые две картинки при наведении русский текст закорючками пишет! www.dimakol.spb.ru/!/carousel_xml.rar
И Embed пробывал и Cyrillic и All и другие варианты или вообще ничего не показывает либо англ а рус кренделями((
Откройте ваш XML файл в блокноте, если под окнами сидите, далее File -> Save as...
Выберите Encoding: UTF-8. Нажмите Save :)
Суперрр все получилось!!!
Огромное Вам человеческое спасибо!!!
Если что обращайтесь может и я на что сгожусь)
sir_graf
08.03.2010, 01:47
А не сочтите за труд помочь мне, я пока не силён в AS3.0.
У меня есть xml файл, который я парсю во флэш ролике, дополняю его элементом и пересохраняю обратно, используя FileRefence.save. Файл (прикрепил) в кодировке UTF-8 Signature. Если сохранять его просто в УТФ-8, то получается ерунда вместо кириллицы.
Кусок кода с записью в файл. booklet - это XML объект, с уже добавленным элементом. Trace выдаёт всё красиво, но уже после сохранения в файле ерунда. Возможно надо использовать ByteArray? Но как правильно это делать?
var textArea:TextField = new TextField();
textArea.text="";
textArea.appendText("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
textArea.appendText(booklet.toString());
trace(booklet);
var fileReference:FileReference = new FileReference();
fileReference.save(textArea.text,"services.xml");
Как-то было замечено, что File и FileReference не записывают BOM (byte order mark) когда записывают UTF-8 - просто дипишите три первых байта ручками, будет работать.
sir_graf
10.03.2010, 20:05
Спасибо, помогло!
Жалко только, что нельзя флэшовым save записать эти первые три байта
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.