我正在尝试使用 Text::Unidecode
将文本文件中的所有重音字符(é、ç、è、à 等)转换为非重音字符(e、c、e) ,a,在本例中)。函数 unidecode()
应该做到这一点,但我得到了奇怪的输出......
每个重音字符似乎都被替换为“A”,后跟一两个其他字符。例如,输入 "éèçàöôäüû"
生成输出 "A(c)A"ASSA APA'A$?A1/4A>>"
。
如果我在脚本中的某些用户定义的字符串上使用该函数,该函数可以正常工作,但当我在 while 循环中使用它时,该函数就不行了,如下所示:
#!/bin/usr/perl
use utf8;
use Text::Unidecode;
while(<>){
print(unidecode($_));
}
#end
无论是否使用 use utf8;
,问题仍然存在,但文本文件格式是否仍然会导致问题?这是模块的已知问题吗?
最佳答案
use utf8
告诉 Perl 在源代码中使用什么编码。要设置输入的编码,请使用
use open IN => ':encoding(UTF-8)', ':std';
或者,如果您不从文件中读取,请设置 *STDIN 句柄的编码:
binmode *STDIN, ':encoding(UTF-8)';
关于Perl Text::Unidecode 未产生正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784042/