Utf 8 Lua string.match utf-询问西班牙语字符-获得半葡萄牙语

Utf 8 Lua string.match utf-询问西班牙语字符-获得半葡萄牙语,utf-8,lua,pattern-matching,Utf 8,Lua,Pattern Matching,Hi Lua中的以下代码: letters = "Vocéá" print(string.match("¡Você","["..letters.."]+")) 返回: �Voc� 如果我用常规的e替换é并去掉á,那么我得到“Voc”。似乎阿干涉了,而阿干涉了。它们是否共享一个字节? 我不是编码专家,但这些是utf16值,utf8二进制文件: á(feff00e1) 1100 0011 1010 0001 ¡(feff00a1) 1100 0010 1010 0001 ê(feff00ea)

Hi 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函数从我的匹配列表中未包含的字符返回问号。

字符和字节是两种不同的东西。字符可以使用不同的编码方法以不同的方式编码为字节。一种可能的编码是UTF-8。不幸的是,Lua的string.match对字符和编码几乎一无所知,它只处理字节


因此,您的脚本不是查找“V”、“c”、“o”、“á”、“é”字符,而是查找“\x56”、“\x63”、“\x6F”、“\xA1”、“\xA9”、“\xC3”字节。

lua的字符串函数不支持utf-8。它们只是字节。所以那场比赛没有达到你的预期。但是Lua5.3有一个utf8库。所以问题是你把字符分成了两半。