我正在编写的库中的一个函数返回一个字符串,当尝试通过正则表达式或index
函数定位 unicode 字符时,该字符串会出现问题。字符串正常打印(使用 Sublime text 的控制台进行 unicode 打印),如下所示:
<xml>V日한ế</xml>
我正在尝试像这样匹配它$string =~ m/V日한ế/
:我正在使用utf8
.
抱歉,我无法重现一个最小的破坏示例,因为当我自己构建字符串并尝试匹配它时,一切正常。我尝试使用该hexdump
站点中的函数,但它为库返回的字符串和我构造的字符串 ( ):中的 unicode 字符打印相同的十六进制序列。库中的那个关闭了 utf 标志,而构建的那个没有,但是另一项测试告诉我这不是问题。$string2 = 'V日한ế'
56 e6 97 a5 ed 95 9c e1 ba bf
关于问题的根源,我只有一个线索:带有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}"...
它在正则表达式中打印字符“日” as%x{65e5}
和在有问题的字符串中打印相同的字符 as %x{e6}%x{97}
。其他 unicode 字符的打印方式类似。
任何有调试字符串和编码经验的人都可以告诉我为什么 regex 并且index
找不到我知道存在于我的字符串中的 unicode 字符,以及如何让这些函数找到它们?