Lua поддерживает Unicode? - PullRequest
       14

Lua поддерживает Unicode?

20 голосов
/ 23 марта 2010

Исходя из ссылки ниже, я не понимаю, поддерживает ли язык программирования Lua Unicode.

http://lua -users.org / wiki / LuaUnicode

Кажется, есть, но есть ограничения.Я просто не понимаю, является ли ограничение чем-то большим / ключевым или не имеет большого значения?

Ответы [ 5 ]

17 голосов
/ 02 ноября 2011

Вы, безусловно, можете хранить строки юникода в lua, как utf8. Вы можете использовать их как любую строку.

Однако Lua не предоставляет никакой поддержки по умолчанию для высокоуровневых операций с поддержкой Юникода над такими строками - например, для подсчета длины строки в символах, преобразования нижнего в верхний регистр и т. Д. Является ли это отсутствие значимым для вы действительно зависите от того, что вы собираетесь делать с этими строками.

Возможные подходы, в зависимости от вашего использования:

  1. Если вы просто хотите вводить / выводить / хранить строки и обычно использовать их как «целые единицы» (для индексации таблиц и т. Д.), Вам вообще может не потребоваться какая-либо специальная обработка. В этом случае вы просто обрабатываете эти строки как двоичные двоичные объекты.

  2. Благодаря продуманному дизайну utf8 некоторые типы манипуляций со строками могут выполняться с строками, содержащими utf8, и будут давать правильный результат без особой заботы.

    Например, вы можете добавлять строки, разделять их до / после символов ascii и т. Д. Например, если у вас есть строка "開発.txt", и вы ищете «.» в этой строке, используя string.find (string_var, "."), а затем разделите ее с помощью обычной функции string.sub на "開発" и ".txt", эти строки результата будут правильными строками utf8, даже если вы не используете никакой вид "Unicode-осведомленный" "алгоритм.

    Аналогично, вы можете выполнять преобразование регистра только для символов ASCII в строках (с высоким нулевым битом) и обрабатывать остальные строки как двоичные, не путая их.

  3. Некоторые операции с поддержкой utf8 настолько просты, что просто написать собственные функции для их выполнения.

    Например, чтобы вычислить длину строки в юникод-символах строки, просто посчитайте количество символов с старшим битовым нулем (символы ASCII) и количество символов с двумя старшими битами 11 ("ведущий") байты "для не-ASCII символов); длина - сумма этих двух.

  4. Для более сложных операций - например, преобразование регистра для символов, не входящих в ASCII, и т. Д. - вам, вероятно, придется использовать библиотеку Lua Unicode, например, в (ранее упомянутой) Страница Юникода Lua-пользователей

9 голосов
/ 31 октября 2010

Lua не поддерживает юникод (кроме как принимать какие-либо байтовые значения в строках).Однако библиотека slnunicode имеет множество строковых функций в юникоде.Например, unicode.utf8.len.

(примечание: этот ответ полностью украден из комментария Грома по другому вопросу - я просто думаю, что заслуживает своего ответа)

6 голосов
/ 24 марта 2010

Если вам нужен краткий ответ, это «да и нет», как указано на связанном сайте.

Lua поддерживает Unicode таким образом, что поддерживается задание, хранение и запрос произвольных значений байтов в строках,так что вы можете хранить любые строки в кодировке Unicode в строке Lua.

Что не поддерживается, так это итерация по символу Unicode, стандартная функция для длины строки в символах Unicode и т. д.Уровень поддержки Unicode (например, то, что доступно в Python с длиной, преобразование в нижний регистр -> в верхнем регистре, кодирование в произвольном кодировании и т. д.) недоступен.

3 голосов
/ 14 января 2015

Lua 5.3 был выпущен сейчас. Он поставляется с базовой библиотекой UTF-8 .

Вы можете использовать библиотеку utf8 для выполнения операций с кодировкой UTF-8, таких как получение длины строки UTF-8 (не количество байтов, как string.len), сопоставление каждого символа (не байта) и т. Д. .

Он не обеспечивает встроенную поддержку, кроме кодировки, например является ли этот символ китайским?

0 голосов
/ 23 марта 2010

Он поддерживает это в том смысле, что вы можете использовать Юникод в строках Lua. Это зависит конкретно от того, что вы планируете делать, но большинство ограничений можно довольно легко обойти, добавив в Lua свои собственные функции.

...