如何编写支持umlauts的Lua模式
2013-9-10 22:0:34
收藏:0
阅读:90
评论:2
有像“Annähren”、“Überbringen”、“Malmö”这样的词并不能被下面的代码所捕捉:
for w in string.gmatch(str, "%w+") do
print(w)
end
有什么解决方案吗?谢谢!
点赞
用户2755919
Lua的字符串库天生不支持除了ASCII之外的任何字符编码,而且假定所有字符都是1字节。虽然Lua字符串是8比特清洁的,但这意味着像string.sub这样的函数即使在多字节字符编码中也会期望字节偏移量,而像string.match这样的函数在非ASCII编码中使用时的行为与预期不符。值得阅读Lua中的Unicode维基页面,其中许多内容也适用于其他非ASCII字符编码。
特别针对您的问题,'ö'(例如在UTF-8中)被编码为两个字节C3 B6,这意味着'%w'不会识别它(它会查找a-z范围内的字符,而没有多字节字符跨度的概念)。'[\xc3\xb6]+'将匹配它,但也将匹配很多其他内容,其中并非所有都是有效的UTF-8,而使用'[ö]'也有同样的问题,因为Lua会将其解释为同一样东西(一个由两个字节组成的序列而不是单个字符)。如果您没有使用UTF-8,具体情况会有所不同,但基本问题仍然相同。
维基页面链接了许多针对UTF-8感知的Lua字符串库实现,例如slnunicode。社区中似乎没有广泛使用其他编码,因此,如果您使用的是除UTF-8之外的编码,则最好将其转换为UTF-8,然后使用该库或类似库。
2013-09-11 14:36:51
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可以尝试以下代码来处理 UTF-8 字符:
local str = "Annähren, Überbringen, Malmö" for w in string.gmatch(str, "[%w\128-\244]+") do print(w) end虽然这种方式并不十分精确,因为它会忽略一些 UTF-8 字符,但是它可能会对你有用。如果你需要更严格的处理方式,可以参考 这个 Stack Overflow 回答 或者这篇博客 关于验证 UTF-8。