2011-10-15 32 views

Trả lời

5

Làm thế nào về

function unichr(ord) 
    if ord == nil then return nil end 
    if ord < 32 then return string.format('\\x%02x', ord) end 
    if ord < 126 then return string.char(ord) end 
    if ord < 65539 then return string.format("\\u%04x", ord) end 
    if ord < 1114111 then return string.format("\\u%08x", ord) end 
end 
+0

Tôi không hiểu cách này trả lời câu hỏi của riêng bạn. Bạn có thực sự chỉ hỏi làm thế nào để định dạng một số thập lục phân với một '\ u' ở phía trước của nó? –

+0

câu hỏi có tiêu đề - "cách để đại diện cho * một unichar trong lua" - thực sự tôi cần chức năng lua để xuất ra giống như tập lệnh python tương đương kể từ khi người ta đến để thay thế khác. Rõ ràng, điều này là vừa đủ. –

10

Không có.

Lua không có khái niệm về giá trị Unicode. Lua không có khái niệm Unicode ở tất cả. Tất cả các chuỗi Lua là chuỗi gồm 8 ký tự "", và tất cả các hàm chuỗi Lua sẽ xử lý chúng như vậy. Lua không xử lý chuỗi như có bất kỳ mã hóa Unicode nào; chúng chỉ là một chuỗi các byte.

Bạn có thể chèn một số tùy ý vào một chuỗi. Ví dụ:

"\065\066" 

Tương đương với:

"AB" 

Ký hiệu \ Tiếp theo là 3 chữ số (hoặc một trong các ký tự thoát), trong đó phải nhỏ hơn hoặc bằng 255. Lua là hoàn toàn có khả năng xử lý các chuỗi với các ký tự được nhúng \000.

Nhưng bạn không thể trực tiếp chèn các điểm mã Unicode vào chuỗi Lua. Bạn có thể phân tách codepoint thành UTF-8 và sử dụng cơ chế trên để chèn codepoint vào một chuỗi. Ví dụ:

"x\226\131\151" 

Đây là ký tự x theo sau là Unicode combining above arrow character.

Nhưng vì không có hàm Lua thực sự hiểu UTF-8, bạn sẽ phải trưng ra một số hàm mong đợi chuỗi UTF-8 để nó hữu ích theo bất kỳ cách nào.

3

Trong khi Lua bản địa không trực tiếp hỗ trợ hoặc xử lý Unicode, chuỗi của nó thực sự là bộ đệm byte tùy ý theo quy ước giữ ký tự ASCII. Vì chuỗi có thể chứa bất kỳ giá trị byte nào, việc xây dựng hỗ trợ Unicode trên đầu các chuỗi gốc là tương đối đơn giản. Nếu các bộ đệm byte chứng minh không đủ mạnh cho mục đích này, người ta cũng có thể sử dụng đối tượng userdata để giữ bất kỳ thứ gì, và bổ sung một metatable phù hợp, ưu tiên nó với các phương thức để tạo, dịch sang mã hóa mong muốn, nối, lặp lại và bất cứ điều gì khác là cần thiết.

a page at the Lua User's Wiki thảo luận nhiều cách khác nhau để xử lý Unicode trong các chương trình Lua.

2

Đối với một câu trả lời hiện đại hơn, Lua 5.3 bây giờ có utf8.char:

Nhận zero hoặc nhiều số nguyên, chuyển đổi mỗi người để tương ứng chuỗi byte UTF-8 và trả về một chuỗi với sự kết nối của tất cả các chuỗi này.

Các vấn đề liên quan