我正在编写一个库,其中一个函数返回一个字符串。当尝试使用正则表达式或 index
函数查找 Unicode 字符时,该字符串存在问题。该字符串的打印结果在 Sublime text 的控制台上可以正常显示 Unicode 字符,例如:
<xml>V日한ế</xml>
我正在尝试这样匹配它:$string =~ m/V日한ế/
,并且我正在使用utf8
。
很抱歉我无法提供一个最小的破解示例,因为当我自己构造字符串并尝试匹配时,一切都正常。我尝试使用这个网站上的hexdump
函数,但它对于库返回的字符串中的unicode字符和我构造的字符串($string2 = 'V日한ế'
)打印相同的十六进制序列:56 e6 97 a5 ed 95 9c e1 ba bf
。来自库的那个关闭了utf标志,而构造的那个没有,但另一个测试表明这不是问题所在。
我只有一个线索可以找到问题的源头:使用use re 'debug';
输出。它给出以下消息:
Matching REx "V%x{65e5}%x{d55c}%x{1ebf}" against "%n<xml>V%x{e6}%x{97}%x{a5}%x{ed}%x{95}%x{9c}%x{e1}%x{ba}"...
在正则表达式中,字符“日”被打印为%x{65e5}
,在有问题的字符串中,同样的字符被打印为%x{e6}%x{97}
。其他Unicode字符也会以不同的方式打印。
有经验的字符串和编码调试人员能否告诉我为什么正则表达式和index
无法找到我知道存在于字符串中的Unicode字符,以及如何使这些函数找到它们?