¿Cómo puedo escribir un símbolo Unicode en lua? Por ejemplo tengo que escribir el símbolo con el 9658
cuando escriboCómo escribir un símbolo Unicode en lua
string.char(9658);
me dio un error. Entonces, ¿cómo es posible escribir un símbolo?
¿Cómo puedo escribir un símbolo Unicode en lua? Por ejemplo tengo que escribir el símbolo con el 9658
cuando escriboCómo escribir un símbolo Unicode en lua
string.char(9658);
me dio un error. Entonces, ¿cómo es posible escribir un símbolo?
Lua no se ve cuerdas dentro. Por lo tanto, sólo puede escribir
mychar = "►"
(añadido en 2015)
Lua 5.3 incluía compatibilidad con UTF-8 secuencias de escape:
La codificación UTF-8 de un carácter Unicode puede haber insertado en una cadena literal con la secuencia de escape \ u {XXX} (tenga en cuenta los corchetes de inclusión obligatorios), donde XXX es una secuencia de uno o más dígitos hexadecimales que representan el punto de código de carácter.
También puede usar utf8.char(9658)
.
Tenga en cuenta que esto solo funcionaría si el archivo está codificado en UTF-8. Por supuesto, no se puede empujar la secuencia de comandos de Lua al intérprete a menos que sea ASCII o UTF-8. –
Tal vez esto le puede ayudar:
function FromUTF8(pos)
local mod = math.mod
local function charat(p)
local v = editor.CharAt[p]; if v < 0 then v = v + 256 end; return v
end
local v, c, n = 0, charat(pos), 1
if c < 128 then v = c
elseif c < 192 then
error("Byte values between 0x80 to 0xBF cannot start a multibyte sequence")
elseif c < 224 then v = mod(c, 32); n = 2
elseif c < 240 then v = mod(c, 16); n = 3
elseif c < 248 then v = mod(c, 8); n = 4
elseif c < 252 then v = mod(c, 4); n = 5
elseif c < 254 then v = mod(c, 2); n = 6
else
error("Byte values between 0xFE and OxFF cannot start a multibyte sequence")
end
for i = 2, n do
pos = pos + 1; c = charat(pos)
if c < 128 or c > 191 then
error("Following bytes must have values between 0x80 and 0xBF")
end
v = v * 64 + mod(c, 64)
end
return v, pos, n
end
I Estoy bastante seguro de que la función es lo opuesto a lo que él quiere. Tiene un punto de código Unicode que quiere codificar en UTF-8. –
¡Opuesto puede recorrer un largo camino, también! :) –
Para obtener un soporte más amplio para el contenido de cadenas Unicode, un enfoque es slnunicode que se desarrolló como parte de la biblioteca de bases de datos Selene. Le dará un módulo que es compatible con la mayoría de lo que hace la biblioteca estándar string
, pero con caracteres Unicode y codificación UTF-8.
Aquí es un codificador para Lua que tiene un punto de código Unicode y produce una cadena UTF-8 para el carácter correspondiente:.
do
local bytemarkers = { {0x7FF,192}, {0xFFFF,224}, {0x1FFFFF,240} }
function utf8(decimal)
if decimal<128 then return string.char(decimal) end
local charbytes = {}
for bytes,vals in ipairs(bytemarkers) do
if decimal<=vals[1] then
for b=bytes+1,2,-1 do
local mod = decimal%64
decimal = (decimal-mod)/64
charbytes[b] = string.char(128+mod)
end
charbytes[1] = string.char(vals[2]+decimal)
break
end
end
return table.concat(charbytes)
end
end
c=utf8(0x24) print(c.." is "..#c.." bytes.") --> $ is 1 bytes.
c=utf8(0xA2) print(c.." is "..#c.." bytes.") --> ¢ is 2 bytes.
c=utf8(0x20AC) print(c.." is "..#c.." bytes.") --> € is 3 bytes.
c=utf8(0x24B62) print(c.." is "..#c.." bytes.") --> is 4 bytes.
Sería de gran ayuda saber qué codificación que desea la cadena resultante en – MattJ