我有一个 unicode 字符串,除了普通字符外,还包含一些奇怪的字符。我已经找到了其中一些字符的“UTF-16(十六进制)”编码,并使用一些简单的正则表达式将它们删除,例如:
$text =~ s/(\s+\x{200C}+|\x{200C}+\s+)/ /g;
上述行用于删除不必要的“零宽度非连接空间”。但是我在删除其余部分时遇到了一些困难。我想知道是否有一个工具或命令可以给它你的 unicode 字符串,它会返回等效的“UTF-16(十六进制)”编码。所以,基本上我想用我的字符串(包含奇怪的字符)来提供它并获取字符的“UTF-16(十六进制)”编码,以便能够编写一些正则表达式来删除它们。我必须注意,我的文本主要是波斯语和阿拉伯语,而不是英语。
我得到了上述问题的答案,但我的整个问题仍然存在。实际上,我有一些像“阿拉伯元音”这样的字符,我想将它们从我的字符串中删除。当我在 perl 中找到这些字符的代码时,我写了一行来删除它们:
$text =~ s/\x{0618}\x{0619}\x{0621}\x{064B}\x{064C}\x{064D}\x{064E}\x{064F}\x{0650}\x{0651}\x{0652}\x{0653}\x{0654}\x{0655}\x{0656}\x{0657}\x{0658}\x{0659}\x{065A}\x{065B}\x{065C}\x{065D}\x{065E}\x{FC5E}\x{FC5F}\x{FC60}\x{FC60}\x{FC61}\x{FC62}\x{FE80}//g;
但奇怪的是,它并不适用于所有情况。例如,应该检测到“Arabic Kasra (\x{0650})”并将其替换为这行代码,但事实并非如此。我已经提到,对于下面一行中的字符,它有效:
\x{064B}\x{064C}\x{064D}\x{064E}\x{064F}\x{065A}\x{065B}\x{065C}\x{065D}\x{065E}\x{FC5E}\x{FC5F}\x{FC60}\x{FC60}\x{FC61}\x{FC62}\x{FE80}
而对于其他人则没有:
\x{0618}\x{0619}\x{0621}\x{0650}\x{0651}\x{0652}\x{0653}\x{0654}\x{0655}\x{0656}\x{0657}\x{0658}\x{0659}
有任何想法吗?
谢谢,