PDA

Просмотр полной версии : XML, UTF8 & KOI8-R


squiddy
20.10.2006, 08:22
Доброго времени суток!

Вопрос к знающим - как заставить Flash читать файл XML в кодировке KOI8-R, а не в UTF8?

Поясняю - преобразовать файл в Юникод в данном случае не кавайное (не есть гуд, не кошерное) решение.
Теоретически можно сделать перекодировку посимвольно данных из XML с помощью ActionScript'а и некоторой таблицы перекодировки - но XMLparser Flash'евый пытается читать русские символы как-то странно - даже не по 2 байта, а так, что из 20 символов получается 12! :eek:
System.useCharset тоже не вариант, потому что кодировка ОС - windows-1251, и, кроме того, мувик должен корректно отображаться на не русскоязычных машинах...

P.S. К тому же, если передавать что-то в мувик из JavaScript, то мувик нормально это отображает в той же KOI8... не понимаю :confused:

jojo
20.10.2006, 12:35
если ты формируеш XML из базы, то сразу выводи данные в UTF8,
ето проще и удобно, и будет корректно отображаться на не русскоязычных машинах.

etc
20.10.2006, 14:31
Выводи KOI в utf-8, а во Flash просто конвертируй раскладку KOI в нормальную.

squiddy
20.10.2006, 15:52
Выводи KOI в utf-8, а во Flash просто конвертируй раскладку KOI в нормальную.
что ты имеешь ввиду?
поясняю ситуацию - есть локальный файл с данными, он может быть только в KOI8-R и никак иначе. Проблема - как заставить парсер прочитать его именно как файл KOI8-R?

или предложите альтенативные варианты решения, исходя из того, что исходную кодировку менять нельзя

jojo, к сожалению, файл локальный и формирую его не я

etc
20.10.2006, 15:55
или предложите альтенативные варианты решения, исходя из того, что исходную кодировку менять нельзя
Поставить System.useCodepage = true;
KOI от windows-1251 отличается лишь обратным регистром и расположением русских букв. Т.е. есть прямая зависимость, например «Ч» в KOI = «в» в windows-1251.

squiddy
20.10.2006, 16:17
Поставить System.useCodepage = true;
KOI от windows-1251 отличается лишь обратным регистром и расположением русских букв. Т.е. есть прямая зависимость, например «Ч» в KOI = «в» в windows-1251.

самый первый пост: "System.useCharset тоже не вариант, потому что кодировка ОС - windows-1251, и, кроме того, мувик должен корректно отображаться на не русскоязычных машинах..."

parent.topflash.SetVariable("pCaption",parent.document.hidframe.document.title);
хотя document.title в кодировке KOI8-R, строка отображается нормально
если же я ставлю useCharset, тогда отображается начинка файла, но начинаются краозяблики в тайтле и других местах

Да, файл с JavaScript и html тоже нельзя перекодировать

P.S. __etc, кстати, не прямая зависимость для некоторых букв, кажется
tr/абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ/ЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪюабцдефгхийклмнопярстужвьызшэщчъ/;

P.P.S. обобщая - проблема - прочитать файл XML хотя бы посимвольно НЕ как UTF8, не прибегая к глобальным для мувика настройкам

etc
20.10.2006, 16:47
System.useCharset не существует.

Решить проблему без utf-8 в таком случае нельзя. (Если, конечно, речь не идёт об AS3, где есть класс ByteArray и его метод readMultibyte).

з.Ы. Может и не прямая зависимость, но мой конвертер, которому уже года два как, прекрасно по прямой зависимости переводит из KOI в win.

meiciuc
22.10.2006, 13:18
Сообщение от __etc
Выводи KOI в utf-8, а во Flash просто конвертируй раскладку KOI в нормальную.

что ты имеешь ввиду?
поясняю ситуацию - есть локальный файл с данными, он может быть только в KOI8-R и никак иначе. Проблема - как заставить парсер прочитать его именно как файл KOI8-R?

ну так сделайте соответствующий файл для флеша но уже в утф-8. Одна строчка РНР переведет его в нужную кодировку. Зачем изобретать велосипед на флеше, если он уже есть в серверной части?

Если Вы напишете свой "декодер" на флеше (убив н-времени, добавив 1-2 КБ кода в ролик), а потом в будущем появиться еще какая-нибудь кодировка - снова лезть во флешку, менять, компилить (и все это без гарантий на будущее). Или проще добавить еще одну строчку в серверной части?

Dendroid
22.10.2006, 14:00
Или проще добавить еще одну строчку в серверной части?
Говорят же, файл локальный, и нет возможности поменять его формат...

Уже все возможные варианты предложены: конвертировать из win-1251 (но не работает на машинах, где кодировка 1252 по-умолчанию), либо в 9-м флэш-плеере прочитать по байтам.
Сравнение с javascript, SetVariable() - некорректно, там уже сам браузер перекодируют куда надо и сам работает с юникодом. Может тогда отработать асинхрон и передать данные во флэш? ;)

Badim
23.10.2006, 12:17
послушай meiciuc =)
не придумый изварещнные методы.
сделай скрипт в 3 строки:
1.загрузить файл,
2.конвертнуть содержимое в утф,
3.вернуть измененое содержимое.
и запрашивай этот скрипт вместо файла.
и будет всем счастье

squiddy
23.10.2006, 14:54
извиняюсь, имелось ввиду useCodepage... надо меньше в Java сидеть со своими классами o.O

спасибо за помощь, конечно - НО ПОВТОРЯЮ ЕЩЕ РАЗ - вариант с изменением кодировки файла или созданием его копии НЕ ПОДХОДИТ. Равно как и использование скриптов на серверной части, т.к. все эти файлы зашиваются в пакет (компиленый ресурс)

Dendroid, спасибо за то, что подтолкунул к идее использовать JS для передачи XMLных нодов

P.S. FPlayer старше 7 версии тоже не подходит...