unidecode的输入是什么?

时间:2013-06-21 09:55:54

标签: string perl unicode utf-8

来自perldoc

  

Text :: Unidecode提供的是一个函数,unidecode(...)   Unicode数据

Unicode data在这句话中意味着什么?它是Perl字符串吗?即,如果在输入字符串上调用,则Encode :: is_utf8将为真,或者是unicode字节,即encode的结果?

2 个答案:

答案 0 :(得分:4)

Text :: Unidecode不进行任何去编码或编码。它仅使用ASCII代码点将包含非ASCII代码点的字符串转换为字符串。这与以UTF-8编码字符串不同。

音译意味着发出类似发声的文本。例如,Unicode而不是ASCII具有像ü这样的变音符号。这可以音译为字符串ue\x75\x65)或u。如果字符ü被编码为UTF-8,我们将获得\xC3\xBC

如果输入仅包含ASCII范围内的代码点,则输出字符串等效于输入(字符串 - 比较相等)。对于这样的输入字符串,可以设置或不设置utf8-flag;对于Perl程序员来说,这是无关的

音译示例:

"über cool" → "uber cool"
"1 · 2"     → "1 * 2"
"€0.99"     → "EU0.99"
"© 2011"    → "(c) 2011"
"¼"         → "1/4"
"pure ASCII"→ "pure ASCII"

答案 1 :(得分:0)

在Text :: Unicode的文档中,在"警告"下,似乎这个短语不正确:

确保输入数据确实是utf8字符串。

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

确保输入数据确实是一个双字节Unicode字符串。

这也称为UCS-2。

如果你想转换真正是utf8的字符串,你会这样做:

my $decode_status = utf8::decode($input_to_be_converted);
my $converted_string = unidecode ($input_to_be_converted);