UTF-8 неправильно отображается в Lua / Corona - PullRequest
1 голос
/ 01 марта 2011

В Lua для проекта iPad Corona я запрашиваю текстовый файл сервера UTF-8 (содержащий китайские символы) с помощью network.request, но результат при отображении в консоли или в приложении отображается как «мусор»,Например, в Google Chrome отображается та же страница UTF-8, что и для заголовка http, когда сервер отправляет это (используя PHP) значение «Content-Type: text / plain;charset = utf-8 '(и нет спецификации, также указывается порядок следования байтов).«Мусор», который я вижу в Lua, похож на тот, когда я «заставляю» Chrome отображать страницу как ISO-8859-1 с помощью меню опций.

У кого-нибудь есть помощь или указатели?Если ничего не помогает, как мне преобразовать строку «мусора» обратно в ее UTF-8-источники в Lua?

Спасибо за любую помощь!

Ответы [ 3 ]

5 голосов
/ 01 марта 2011

Луа ничего не знает о UTF-8;Строки Lua - это просто последовательности байтов.Похоже, что сама Corona анализирует строки как ISO8859-1.Наиболее вероятной причиной этого является то, что они делают что-то действительно глупое и наивное, например, обрабатывают каждый байт строки как кодовую точку Unicode.

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

0 голосов
/ 15 апреля 2011

У меня была точно такая же проблема, за исключением японских символов. Хотя Lua не поддерживает UTF-8, Corona действует так же, как и он. Это означает, что ... если вы передаете строку UTF-8 в display.newText (...), она должна отображаться правильно. Теперь, если вы выводите данные на консоль, она фактически распечатывает необработанные байты строки. И, если вы попытаетесь напечатать длину строки, она фактически выведет количество байтов.

Итак, в итоге, Lua рассматривает все строки как массив байтов. Он ничего не знает о UTF-8. Некоторые методы API-интерфейса Corona при передаче строк UTF-8 будут правильно отображать строки.

У меня были проблемы, когда я смешивал UTF-8 с простыми символами ASCII, что, по-моему, смутило Corona (я имею в виду, что я смешал английские символы с японскими символами ... хотя все еще UTF-8). У меня есть догадка, что каждый символ в строке должен иметь одинаковую длину в байтах, чтобы Corona отображала его правильно. Попробуйте распечатать по одному символу за раз, чтобы увидеть, поможет ли это. Пожалуйста, не стесняйтесь оставлять комментарии здесь, если у вас возникли проблемы. Я бы тоже хотел разобраться в этом вопросе.

0 голосов
/ 12 апреля 2011

Можете ли вы показать код для вызова network.request ()?

Если вы загружаете HTML-страницу, вы должны использовать network.download ().

...