2016 年 3 月 21 日
UTF-8 字符串插件介绍
应用程序开发人员的一个潜在挑战是将其应用程序进行“国际化”。也许只是简单地处理包含非 ASCII 字符的姓名,或者更全面地支持像日语这样使用独特字符集的语言。
Corona 开发人员的核心问题是 Lua 的 string 函数仅将字符串视为一系列字节,并且它不识别多字节字符。如果你想知道包含多字节字符的字符串中有多少个字符,这会导致问题,因为在这种情况下,Lua 只会计算字节数。如果你需要收集子字符串或将非 ASCII 字符串转换为大写或小写,则可能会出现更多问题。总而言之,对于那些为全球分发构建应用程序的开发人员来说,这可能会非常令人沮丧。
解决方案?
最近,Corona Labs 发布了 UTF-8 插件,以帮助缓解这些问题。该插件的功能与现有的 string 库函数非常相似,只是 UTF-8 等效函数可以处理多字节字符串。例如,正如你可能在普通的 ASCII 字符串上使用 string.match() 一样,你可以用 utf8.match()
替换非 ASCII 字符串。
此插件还引入了几个用于高级用途的新函数,帮助你处理字符位置、偏移量、代码点、子字符串插入/删除等。你可以在我们的 文档 中查看完整的列表和用法详情。
用法
与所有 Corona 插件一样,你需要将其包含在你的 build.settings
文件中
1 2 3 4 5 6 7 8 9 10 |
settings = { plugins = { ["plugin.utf8"] = { publisherId = "com.coronalabs" }, }, } |
然后,在你要使用 UTF-8 函数的任何模块中,像往常一样 require()
该插件
1 2 |
local utf8 = require( "plugin.utf8" ) |
之后,只需将 string.[methodName]
函数作为 utf8.[methodName]
调用即可。例如,请注意同一个字符串上相应的“长度”函数 (string.len()
和 utf8.len()
) 的输出值
1 2 3 4 |
-- 俄文字母表 print( string.len( "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" ) ) -- 打印 64 print( utf8.len( "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" ) ) -- 打印 32 |
结论
如你所见,UTF-8 插件为 Corona 开发人员提供了一些有价值的新功能,特别是那些为国际分发开发应用程序的开发人员。要了解更多信息,请参考文档 或在 Corona 论坛中讨论此插件。
RuneW
发表于 3 月 22 日 06:54谢谢!
madclown
发表于 5 月 11 日 07:21这是一个很棒且非常需要的插件。
Andrzej Futuretro
发表于 6 月 16 日 09:31这里来晚了,但想对这个很棒的插件表示感谢!