PDA

Просмотр полной версии : XML и Flash = фигня с кодировками


Serzhik
25.12.2005, 21:36
Проблема вот в чем (может, уже спрашивали, не бейте ногами:)):
При чтении данных из xml-файла бьется кодировка. В самой флешке пробовал указывать System.useCodepage = true;
Во вложении файлы:
menu.xml - файл, из которого берутся данные
menu_local (with useCodepage).swf - флешка с useCodepage = true;
menu_local (wo useCodepage).swf - флешка без useCodepage

В чем может быть проблема? Сам xml пишется с помощью PHP 4.6 (DOM XML). Все русские символы перекодируются с помощью iconv(). Для iconv пробовал указывать разные кодировки (windows-1251, ISO-8859-1, koi8-r). Нормально xml генерится только с кодировкой win1251. Где косяк? :confused:

Antares
25.12.2005, 22:28
Встречался с таким, победил, руками указав System.useCodepage = false;

Antares
25.12.2005, 22:29
Хотя стоп. iconv у тебя из какой в какую перекодирует?

Serzhik
25.12.2005, 23:20
Хотя стоп. iconv у тебя из какой в какую перекодирует?
useCodepage = false не помогает (то же самое, когда я не указываю вообще useCodepage)

Перевод делал в utf-8 из win1251, ISO-8859-1, koi8-r (в порядке бреда указывал и win1252:))

Сами данные читаются из базы. База в utf-8. Просто на страницу данные выводятся нормально (у меня предпросмотр перед выгрузкой в xml)
У iconv() input, output и internal кодировки - ISO-8859-1. Пробовал принудительно указывать input win1251, output - utf-8. Тоже не помогло.

У меня уже была похожая проблема. Там все решилось iconv("ISO-8859-1", "utf-8", $str); Здесь такой вариант не проходит. Возможно, потому что хостинг в данном случае другой. До некоторого времени там вообще не было поддержки iconv (включили по моему запросу).

Antares
26.12.2005, 00:46
У меня соответственно один вопрос. Если в БД у нас utf-8, то укажи на всякий при выводе хедером, что ты используешь uft-8, соответственно, про кодировки во Flash можно будет забыть, равно как и про iconv.

Потому что я хоть убей не понимаю, чего ты хочешь добиться, конвертируя строку в utf-8 (что априори, т.к. ты упомянул, как настроена БД) iconv-ом как $str = iconv("ISO-8859-1", "utf-8", $str);

Это примерно то же самое, что на встречу с японцем пригласить переводчика с итальянского :)

Serzhik
26.12.2005, 08:59
У меня соответственно один вопрос. Если в БД у нас utf-8, то укажи на всякий при выводе хедером, что ты используешь uft-8, соответственно, про кодировки во Flash можно будет забыть, равно как и про iconv.

Потому что я хоть убей не понимаю, чего ты хочешь добиться, конвертируя строку в utf-8 (что априори, т.к. ты упомянул, как настроена БД) iconv-ом как $str = iconv("ISO-8859-1", "utf-8", $str);

Это примерно то же самое, что на встречу с японцем пригласить переводчика с итальянского :)

Мда, по поводу итальянца - это верно :D
Просто от безнадеги я уже не знаю, что делать... Кодировка в базе верная, выдача на экран происходит норм! В xml тоже выгружается все нормально (по крайней мере, IE и Visual Studio .NET ошиюки синтаксиса не находят). Так почему тогда флеш не может корректно прочитать этот файл?
А по поводу хедера не понял: я ж не на экран выдаю информацию, а в файл. Причем используя DOM XML, который по умолчанию генерит файл именно в utf8. На всякий случай попробовал результат iconv вывести на экран (установил в браузере кодировку UTF8): все корректно вывелось в этой кодировке. А в флеше опять кракозябры!
По поводу useCodepage: включение/отключение (true/false) этой опции на хостинге не имеет никакого значения, файл одинаково читается кракозябрами. Хостинг под *nix'ом

----------------------------------------------

Теперь по поводу самой флешки: попробовал trace'ом вывести данные, которые читаются из файла. Так вот при UseCodepage = false все читается отлично, но при этом не выводится (в выпадающем списке пустые строчки). Хотя значения, которые присваиваются этим мувикам, правильные

MIX-er
26.12.2005, 09:14
я когда мучался с тож е проблемой то после кодировки при открытии редактором файл представлял из себя какую то белеберду... но работал...

Serzhik
26.12.2005, 09:51
Немного разобрался: проблема была в том, что для поля, в которое происходит вывод строк меню (мувик с текстовым полем), стояли настройки Character->Specify Range только для латиницы. Добавил кирилицу, убрал useCodepage (если оставить useCodepage=true, то выводится будут кракозябры) - на локальной машине все заработало. А вот на хостинге все равно кракозябры!!! Фонт в этом текстовом поле Arial (пробовал Arial Cyr - тоже самое)

===================================================

Это полный пердимонокль!!!!!!
Все получилось, но почему заработало, я, хоть убейся об стену, не понимаю!!!!
1. Сделал выгрузку с преобразованием iconv("ISO-8859-1", "utf8", $str)
2. useCodepage = true;
3. Паблиш для FlashPlayer 7.0, AS 2.0

И теперь все ок!!! Но почему??? Откуда там ISO-8859-1??? Сами страницы у меня в win1251, база в utf8. Правда, внутрення кодировка iconv ISO-8859-1. Неужели из-за этого?
Причем самое интересное: теперь IE выводит саму xml с кракозябрами (правда, теперь мне на это наплевать, главное, чтобы флеш нормально читал). Но вопрос-то остается: получается, что флешка читает xml в какой-то кривой кодировке? Или как?
Гуру! Объясните, а то чокнусь:)

Dezept1p
28.12.2005, 15:45
сам фаил xml сохранить Save as ->(unicode)

nyctota
28.12.2005, 21:33
Попробовал. Не понравилось =/
В самом деле, как только эмбедишь шрифт -- то, что приходит с сервака становиться нечитабельным.
Хотя, если сохранить текстовый файл в Юникоде, то его читает и отображает нормально. Что за!? Я в шоке.

Serzhik
28.12.2005, 22:17
сам фаил xml сохранить Save as ->(unicode)

Файл выгружается с помощью php. Это происходит на сервере, никто его скачивать и пересохранять не должен. И, кстати, он и так сохраняется в utf...

MIX-er
29.12.2005, 14:10
не факт что в UTF...

Antares
29.12.2005, 14:23
не факт что в UTF...
Если указать хедером, что в UTF-8 -- факт ;)

nyctota
07.01.2006, 12:09
to Serzhik:

Ну, и как там дела? Если не против -- держи в курсе событий. Мне это интересно (странно, что, по всей видимости, ТОЛЬКО мне =/ ).

Antares
07.01.2006, 16:45
Пустота, а что непонятного? Видимо, человек жестко указал кодировку возвращаемых данных (или файлу) и все.

Madasan
07.01.2006, 17:00
Если указать хедером, что в UTF-8 -- факт ;)
ну типа того!?!
$dom=new domDocument('1.0','UTF-8')

nyctota
07.01.2006, 17:03
to Antares:
Непонятно то, о чем писал я. Автор упомянул об этом вскользь и, видимо, забыл (забил).
Я говорю про то, что если даже с сервера приходит юникод, то стоит внедрить в тектовое поле шрифт, как оно перестает отображать текст (у меня из всех символов только "равно" осталось -- остального просто нет).

Antares
07.01.2006, 17:30
Заведи тред, подумаем. В моей практике исчезновения не было.