Perl Text::Unidecode 未产生正确的输出

标签 perl

我正在尝试使用 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)';

参见openbinmode .

关于Perl Text::Unidecode 未产生正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784042/

相关文章:

perl - Perl 中的 my 和 local 有什么区别?

perl - 删除注释而不影响配置文件中的值

Python 相当于 Perl 的 URI::Find

Perl 全局符号需要明确的包名

perl - 使用 Net::SSH2 检索 top 命令的输出

json - 根据条件添加到 JSON ($payload={})

perl - 在 CPAN 依赖项安装期间无法在 @INC 中定位,而不是以 root 身份执行

perl - 使用 Moose 进行对象组合的最佳方法是什么?

perl - 如何在 Perl 中获得回溯?

perl - Perl 中的 64 位 "network"(大端)顺序整数