|
|
|||||
Регистрация: Jun 2012
Сообщений: 5
|
Изменение кодировки текста
Здравствуйте.
Есть проблема с перекодировкой данных, загруженных URLLoader'ом с сервера. Информация от сервера приходит в windows-1251. Чтобы все правильно отображалось, текст надо конвертнуть в utf-8. Пробовал делать так: var bytes:ByteArray = new ByteArray(); bytes.writeMultiByte(e.target.data, "windows-1251"); bytes.position = 0; trace(bytes.readMultiByte(bytes.bytesAvailable, "utf-8")); Ещё пробовал так: var bytes:ByteArray = ByteArray(event.target.data); trace(bytes.readMultiByte(bytes.bytesAvailable,"utf-8")); Не понимаю в чем может быть проблема, т.к. код который я привел я скопипастил с интернет-ресурсов, и у других людей он работает... |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jun 2012
Сообщений: 5
|
Спасибо, теперь работает
И все-таки интересно, почему не сработал первый вариант? Как сменить кодировку если на вход идет строка? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Дело в том, что String это уже utf-8, то есть плеер прочитал бинарные данные строки в windows-1251 и теперь считает, что это строка utf-8. Затем эту строку Вы не читаете как windows-1251, а преобразовываете в windows-1251. При этом коды символов рассматриваются как utf-8 и смещаются в свои места по windows-1251. Фишка же в том, что они уже были на своих местах, строка была не utf-8, а windows-1251.
Как бы странно это ни звучало, попробуйте поменять местами кодировки в Вашем коде. То есть write — utf-8, a read — windows-1251.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jun 2012
Сообщений: 5
|
И так пробовал. На входе была строка Äðóãèå, на выходе Äðóãèå
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот как.. оказывается, при преобразовании полученных данных в String плеер читает их не как utf-8
private function loaderCompleteHandler(event:Event):void { trace("incoming string:", event.target.data.toString()); var bytes:ByteArray = new ByteArray(); bytes.writeMultiByte(event.target.data, "windows-1252"); bytes.position = 0; trace("Convert to Windows-1251: ", bytes.readMultiByte(bytes.bytesAvailable, "windows-1251")); }
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 14:07. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , bytearray , charset , encoding |
|
|