Подтвердить что ты не робот

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

Основываясь на приведенной ниже ссылке, я смущен тем, поддерживает ли язык программирования Lua Unicode.

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

Похоже, что он делает, но имеет ограничения. Я просто не понимаю, есть ли что-то большое или ключевое ограничение или не большое дело?

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

  • Для более сложных операций: например, для преобразования без кода ASCII и т.д., вам, вероятно, придется использовать библиотеку юникода Lua, например, на ранее упомянутой странице Страница Юникода пользователей Lua

Ответ 2

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

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

Ответ 3

Если вы хотите получить короткий ответ, это "да и нет", как указано на связанном сайте.

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Старый вопрос, но спустя почти 10 лет все еще актуален.

А с 2015 года, с выходом Lua 5.3, ответ на этот вопрос изменился на "да, через встроенную библиотеку utf8".

В Lua 5.3 это "просто работает":

> a = "何時ですか"
> a
何時ですか
> utf8.len(a)
5
> string.gsub(a, "何","六")
六時ですか   1