我有被第三方打电话给我的谁已经注册了软件人的名字一个Perl脚本。其中一个政党的编码为UTF-8的名称,所以我已经适应我的脚本相应解码UTF-8 ASCII编码与:: decode_utf8(...)。

这通常工作得很好,但每6个月左右的名称之一包含西里尔文,希腊文或罗马尼亚语字符,所以解码名称导致垃圾字符,如“ПоÐ'Ñ€d°Ð¶Ð°Ð½ÑкаN ”。我不得不跟进客户,问他他的名字的“拉丁字符版本”,以发出注册码。

因此,是否有任何的Perl模块,能够检测是否有这样的字符,并自动如果必要将它们转换为与其最接近的ASCII表示?

看来,我可以使用类语言::西里尔:: TRANSLIT :: ICAO加器语言:: DetectCharset处理西里尔文,但我喜欢的东西,与其他人物的作品集以及。

有帮助吗?

解决方案

我相信你可以使用文本:: Unidecode 对于这一点,恰恰是它试图做。

其他提示

如果您需要处理不在ASCII范围UTF-8的数据,最好的办法是改变你的后端,因此不会对UTF-8呛。你会如何去音译汉字标志?

如果你西里尔文字没有“最接近的ASCII表示”对于许多字符。

在文档文本:: Unicode的,在“注意事项”,看来这句话是不正确的:

确保输入数据真的是一个UTF8字符串。

UTF-8是一个可变长度编码,而文本:: Unidecode只接受为每个字符的固定长度(2字节)编码。所以这句话应该改为:

确保输入数据真的是两个字节Unicode字符的字符串。

此也被称为UCS-2。

如果你要转换的字符串这真的是UTF8,你会做它像这样:

my $decode_status = utf8::decode($input_to_be_converted);
my $converted_string = unidecode ($input_to_be_converted);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top