You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl UTF-8输出异常求助:法语词汇读取后显示乱码

Perl输出UTF-8字符乱码问题解决

你的问题是:直接打印脚本里的法语词汇“préféré”显示正常,但读取同内容的UTF-8文件后输出变成pr�f�r�乱码。

问题原因

Perl读取文件时用:encoding(UTF-8)将文件内容解码为Perl内部的Unicode字符串,但标准输出未指定编码,导致内部Unicode字符被错误编码输出。而脚本里的字面量是直接以UTF-8字节形式输出(脚本本身为UTF-8编码),终端能正确识别,所以显示正常。

解决方案

方案1:单独设置标准输出编码

在脚本开头添加binmode语句,指定标准输出使用UTF-8编码:

#!/usr/bin/env perl

use strict;
use warnings;

binmode STDOUT, ':encoding(UTF-8)'; # 配置标准输出为UTF-8编码

print "préféré\n";

open( my $fh, '<:encoding(UTF-8)', 'text' ) ;

while ( <$fh> ) { print $_ }

close $fh;

exit;

方案2:全局设置默认编码

使用use open编译指令,一次性设置标准输入/输出/错误,以及后续文件操作的默认编码:

#!/usr/bin/env perl

use strict;
use warnings;
use open qw(:std :encoding(UTF-8)); # 全局设置默认编码为UTF-8

print "préféré\n";

open( my $fh, '<', 'text' ) ; # 无需再手动指定编码

while ( <$fh> ) { print $_ }

close $fh;

exit;

执行修改后的脚本,读取文件输出的“préféré”就能正常显示了。

内容的提问来源于stack exchange,提问作者amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:09:17