Hướng dẫn sử dụng UTF-8 string plugin trong Corona SDK

Thảo luận trong 'Tutorials và Thủ thuật lập trình' bắt đầu bởi Khúc Vương, 22/3/16.

  1. Administrator
    Khúc Vương
    Nhân viên CoronaViet
    Tham gia ngày:
    17/1/14
    Bài viết:
    467
    Đã được thích:
    126
    Một thách thức đối với các nhà phát triển ứng dụng muốn "nội địa hóa" các ứng dụng của họ cho các quốc gia trên thế giới có lẽ đó là những vấn liên quan đến việc sử dụng các ký tự non-ASCII trong tên, địa danh hay vật phẩm…, hoặc hỗ trợ toàn diện hơn cho các ngôn ngữ như tiếng Nhật với một bảng chữ cái đặt biệt.

    [​IMG]

    Vấn đề cốt lõi ở đây là hàm String của Lua xem một chuỗi chỉ đơn thuần là một loạt các byte, và nó không thể nhận biết các ký tự nhiều byte. Điều này gây ra vấn đề như nếu bạn muốn biết có bao nhiêu ký tự ở trong một chuỗi đang chứa ký tự nhiều byte, bởi vì Lua chỉ đơn giản là đếm byte. Các vấn đề khác có thể phát sinh nếu bạn cần phải thu thập sub-strings hoặc chuyển đổi một chuỗi non-ASCII thành chữ hoa hay chữ thường. Tất cả điều này có thể làm cho bạn cảm thấy khó chịu.

    Giải pháp?

    Gần đây, Corona Labs đã phát hành plugin UTF-8 để giúp bạn giảm bớt các vấn đề này. Chức năng của plugin rất giống với hàm string hiện có, nhưng nó có thể xử lý chuỗi đa byte. Ví dụ, giống như bạn có thể sử dụng string.match() trên một chuỗi ASCII bình thường, bạn có thể sử dụng utf8.match() trên các chuỗi non-ASCII.

    Plugin này cũng giới thiệu một số chức năng mới nhằm phục vụ cho mục đích nâng cao, giúp bạn giải quyết các vấn đề liên quan đến vị trí ký tự, offsets, code points, chèn/xóa sub-string, và nhiều điều khác…

    Sử dụng

    Giống như tất cả các plugin Corona, bạn cần phải bao gồm nó trong tập tin build.settings của bạn:
    Mã (Lua):
    settings =
    {
        plugins =
        {
            ["plugin.utf8"] =
            {
                publisherId = "com.coronalabs"
            },
        },
    }
    Sau đó, trong bất kỳ module nào mà bạn muốn sử dụng hàm UTF-8, chỉ đơn giản là require() plugin như bình thường:
    Mã (Lua):
    local utf8 = require( "plugin.utf8" )
    Sau đó, thay vì gọi hàm string.[methodName], gọi utf8.[methodName]. Ví dụ, để in "chiều dài" của chuỗi bằng cách sử dụng hàm string.len() và utf8.len() với một chuỗi giống hệt nhau:
    Mã (Lua):
    -- The Russian alphabet
    print( string.len( "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" ) )  --prints 64
    print( utf8.len( "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" ) )    --prints 32
    Như bạn có thể thấy, plugin UTF-8 cung cấp một số tính năng mới có giá trị cho các nhà phát triển Corona, đặc biệt là những ứng dụng được phát triển để phân phối cho thị trường quốc tế. Để tìm hiểu thêm, xin vui lòng tham khảo các tài liệu của CoronaLabs tại đây.
    Last edited by a moderator: 27/3/16
    taplamgame thích bài này.

Chia sẻ trang này