|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как определить допустимые ли в строке символы
Здравствуйте. Потребовалось вытянуть русские id3 теги из mp3 файлов. Нашел на форуме такой код
private function convertID3(data:String):String { var b:ByteArray = new ByteArray(); for (var i:uint = 0; i < data.length; i++){ b[i] = data.charCodeAt(i); } return b.readMultiByte(b.bytesAvailable, "win-1251"); } Теперь стала задача: если функция convertID3 возвращает мне английский или русский текст - значит вывожу его в текстовое поле. Если получаю иероглифы - то в поле вывожу другой текст. Но как мне узнать что она возвратила: нормально читаемый человеком текст, или квадратики и пр. знаки?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
Регистрация: Jun 2011
Сообщений: 212
|
Код-то вы нашли, а комменты прочитать поленились.
Для внутреннего хранения значений с типом String в AS3 используются символы Unicode в формате UTF-16. И charCodeAt возвращает 16-разрядное число, а не восьмиразрядный win-1251. (http://www.flasher.ru/forum/showthre...highlight=1251) Что касается текста в ID3, то с английским там проблем быть не может, а c кириллицей проблем не будет только если при создании тегов использована кодировка utf-16 (и это относится не только к AS3). |
|
|||||
Не поленился, просто код нашел в совсем другой теме.
По сути: Значит в 1 из 50-ти треков при создании тегов использована кодировка utf-16, а в остальных нет? Значит мне никак не получить из них данные в нужном формате, потому что сам String по своей природе представлен в UTF-16? Если так, то вопрос открыт: Как узнать что возвратила функция: читаемый русский или английский текст, или квадраты?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
Регистрация: Jun 2011
Сообщений: 212
|
Проблема не в том, что в AS3 тип String - это UTF-16. Проблема в криворукости тех, кто создавал те самые mp3 c id3 тегами используя нестандартные кодировки. Ну а корень проблем - в id3v1 отсутствует поддержка кириллицы (и вообще всего что не ISO-8859-1).
В результате во многих случаях настоящая кодировка id3 тега не может быть идентифицирована однозначно. В вашем случае (скорее всего) коды win1251 интерпретируются как коды ISO-8859-1. Причем интерпретируются не вами, а классом ID3Info. Повлиять на его поведение вы не можете. Анализировать "белиберду", которая при этом получается - занятие весьма неблагодарное. Для справки: до сих пор не сущесвует надежного алгоритма определения кодировок (восьмибитных) для текстовых файлов (почитайте php-форумы на эту тему). А существующие алгоритмы позволяют лишь оценить вероятность и очень сильно языкоориентированы (например - используя частотный анализ букв, начало слов с "неправильных букв" и т.п.). Ваша задача - как раз подобная. Если вам таки хочется поизвращаться - попробуйте сравнивать символы в полученной строке регулярным выражением с маской типа [a-zA-Z0-9а-яА-Я]. Если "попаданий" мало, значит, скорее всего, кодировка битая. Можете еще добавить в маску знаки препинания. |
Часовой пояс GMT +4, время: 03:01. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|