Извлеките первую букву строки UTF-8 С помощью Lua
есть ли способ извлечь первую букву строки в кодировке UTF-8 С Lua?
Lua неправильно поддерживает Unicode, поэтому string.sub("ÆØÅ", 2, 2)
вернутся "?"
, а не "Ø"
.
есть ли относительно простой алгоритм синтаксического анализа UTF-8, который я мог бы использовать для строкового байта на байт, с единственной целью получить первую букву строки, будь то китайский символ или A?
или это слишком сложно, требуя огромной библиотеки, так далее.?
2 ответов
вы можете легко извлечь первую букву из строки в кодировке UTF-8 со следующим кодом:
function firstLetter(str)
return str:match("[%z-74-4][8-1]*")
end
потому что кодовая точка UTF-8 начинается либо с байта от 0 до 127, либо с байта от 194 до 244, за которым следует один или несколько байтов от 128 до 191.
вы даже можете итерации над кодовыми точками UTF-8 аналогичным образом:
for code in str:gmatch("[%z-74-4][8-1]*") do
print(code)
end
обратите внимание, что оба примера возвращают строка значение для каждой буквы, а не Числовое значение кодовой точки Unicode.
Lua 5.3 обеспечить библиотека UTF-8.
можно использовать utf8.codes
чтобы получить каждую кодовую точку, а затем использовать utf8.char
чтобы получить характер:
local str = "ÆØÅ"
for _, c in utf8.codes(str) do
print(utf8.char(c))
end
это также работает:
local str = "ÆØÅ"
for w in str:gmatch(utf8.charpattern ) do
print(w)
end
здесь utf8.charpattern
это просто строка "[-\x7F\xC2-\xF4][\x80-\xBF]*"
для шаблона, чтобы соответствовать одной последовательности байтов UTF-8.