检测任意字符串的字符集/脚本

And*_*ndy 5 utf-8

我正在清理实体(人员、组织等)的“个人资料”数据库,个人资料的一个这样的部分是用 UTF-8 编码的本地脚本(例如泰语)中的个人姓名. 在之前的数据结构中,我们没有捕获名称的字符集,因此现在我们有更多的无效值记录,无法手动查看。

此时我需要做的是,通过脚本,确定任何给定名称的语言/脚本。使用以下示例数据集:

Name: "??????????"
Script: NULL

Name: "?????"
Script: NULL
Run Code Online (Sandbox Code Playgroud)

我需要结束

Name: "??????????"
Script: Thai

Name: "?????"
Script: Amharic
Run Code Online (Sandbox Code Playgroud)

我不需要翻译名称,只需确定它们的脚本即可。是否有一种既定的技术可以解决此类问题?

sim*_*que 2

您可以charnames在 Perl 中使用来找出给定字符的名称。

\n\n
use strict;\nuse warnings;\nuse charnames \'\';\nuse feature \'say\';\nuse utf8;\n\nsay charnames::viacode(ord \'\xd4\xb2\');\n\n__END__\nARMENIAN CAPITAL LETTER BEN\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样,您可以将所有字符串分解为字符,然后为每种类型的字符组构建计数哈希。从中找出组有点棘手,但这只是一个开始。一旦你完成了一个字符串,计数最高的组应该获胜。这样,您就不会受到标点符号或数字的干扰。

\n\n

也许更明智的做法是找到已经具有 unicode 范围名称并易于查找的内容。我知道 CPAN 上至少有一个模块可以做到这一点,但我现在找不到它。类似的东西可以被滥用以使查找更容易。

\n