2011-11-02 42 views
6

Làm cách nào để viết biểu tượng Unicode trong lua. Ví dụ tôi phải viết biểu tượng với 9658
khi tôi viếtCách viết một ký hiệu unicode trong lua

string.char(9658); 

tôi có một lỗi. Vậy làm sao có thể viết một biểu tượng như vậy.

+1

Nó sẽ giúp để biết những gì mã bạn muốn chuỗi kết quả trong – MattJ

Trả lời

12

Lua trông không dây bên trong. Vì vậy, bạn chỉ có thể viết

mychar = "►" 

(bổ sung năm 2015)

Lua 5.3 giới thiệu hỗ trợ cho UTF-8 chuỗi thoát:

Các mã hóa UTF-8 của một ký tự Unicode có thể được chèn vào một chuỗi chữ với chuỗi thoát \ u {XXX} (lưu ý các dấu ngoặc kèm theo bắt buộc), trong đó XXX là một chuỗi gồm một hoặc nhiều chữ số thập lục phân đại diện cho điểm mã ký tự.

Bạn cũng có thể sử dụng utf8.char(9658).

+2

Lưu ý rằng điều này sẽ chỉ hoạt động nếu bản thân tệp được mã hóa UTF-8. Tất nhiên, bạn không thể xô kịch bản Lua tại trình thông dịch trừ khi nó là ASCII hoặc UTF-8. –

2

Có lẽ điều này có thể giúp bạn:

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 
+2

tôi 'm khá chắc chắn rằng chức năng là đối diện của những gì anh ta muốn. Ông có một codepoint Unicode mà ông muốn mã hóa trong UTF-8. –

+0

Đối diện cũng có thể đi một chặng đường dài! :) –

2

Để nhận được hỗ trợ rộng hơn cho nội dung chuỗi Unicode, một cách tiếp cận là slnunicode được phát triển như một phần của thư viện cơ sở dữ liệu Selene. Nó sẽ cung cấp cho bạn một mô-đun hỗ trợ hầu hết thư viện tiêu chuẩn string, nhưng với các ký tự Unicode và mã hóa UTF-8.

3

Dưới đây là một bộ mã hóa cho Lua mà phải mất một điểm mã Unicode và tạo ra một chuỗi UTF-8 cho các nhân vật tương ứng:.

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. 
Các vấn đề liên quan