Lua string.match utf - 要求西班牙字符 - 得到一半的葡萄牙文。

下面是用 Lua 编写的代码:

letters = "Vocéá"
print(string.match("¡Você","["..letters.."]+"))

返回结果为:

�Voc�

如果将 é 替换为常规的 e 并去掉 á,那么就会得到 "Voc"。似乎 á 会干扰 ¡,é 会干扰 ê。这可能是因为它们共享一个字节吗?虽然我不是编码专家,但这些是 utf16 值、utf8 二进制值:

á(feff00e1) 1100 0011 1010 0001
¡(feff00a1) 1100 0010 1010 0001
ê(feff00ea) 1100 0011 1010 1010
é(feff00e9) 1100 0011 1010 1001

我该如何忽略葡萄牙语字符和 "¡"(以及其他许多我不知道的字符)?

也许这不是最好的方法。我正在尝试构建一个西班牙文分词器。不过我很惊讶 match 函数会从未包含在我的匹配列表中的字符返回一个问号。

点赞
用户1881196
用户1881196
字符和字节是两个不同的概念。字符可以用多种方式编码成字节,使用不同的[编码](http://en.wikipedia.org/wiki/Character_encoding)。其中一种可能的编码是UTF-8。不幸的是,Lua的string.match几乎不了解字符和编码,它只处理字节。

因此,您的脚本不是在查找“V”,“c”,“o”,“á”,“é”字符,而是在查找“\\x56”,“\\x63”,“\\x6F”,“\\xA1”,“\\xA9”,“\\xC3”字节。
2015-05-25 09:42:17