从perldoc:
Text::Unidecode 提供的是一个函数 unidecode(...) ,它接受 Unicode 数据
Unicode data
这句话中的意思是什么?是 Perl 字符串吗?即如果在输入字符串上调用 Encode::is_utf8 或者是 unicode 字节即结果encode
?
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"
在 Text::Unicode 的文档中,在“Caveats”下,这个短语似乎是不正确的:
确保输入数据确实是 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);