【发布时间】:2011-09-07 10:38:36
【问题描述】:
由于各种原因,我收到了错误消息 Malformed UTF-8 character 和
Wide character in print 来自旧脚本。
我想禁止/禁用这两个警告,以便它们不会写入STDERR。
我该怎么做?
【问题讨论】:
由于各种原因,我收到了错误消息 Malformed UTF-8 character 和
Wide character in print 来自旧脚本。
我想禁止/禁用这两个警告,以便它们不会写入STDERR。
我该怎么做?
【问题讨论】:
在 Windows Powershell 控制台上使用 Perl 从 log4perl 调试输出时遇到同样的问题
Wide character in print at C:/strawberry/perl/site/lib/Log/Log4perl/Appender/Screen.pm line 39.
解决方案是(在 log4perl 配置文件中)
log4perl.appender.Screen.utf8 = 1
【讨论】:
这里有两个例子可以帮助你理解错误:
milu@ubuntu: ~/Milu/Dev/Perl > cat malformed-utf8-char.pl
use utf8; # script source must be in UTF-8
use strict;
use warnings;
print "K�se\n";
milu@ubuntu: ~/Milu/Dev/Perl > perl malformed-utf8-char.pl
Malformed UTF-8 character (unexpected non-continuation byte 0x73,
immediately after start byte 0xe4) at malformed-utf8-char.pl line 4.
Kse
源代码是 Latin-1,我的终端是 UTF-8。该字符串实际上是“Käse”。 utf8 杂注必须被删除,或者源代码以 UTF-8 格式保存。
milu@ubuntu: ~/Milu/Dev/Perl > cat wide-char-in-print.pl
use utf8;
use strict;
use warnings;
# binmode STDOUT, ':utf8';
print "Группа сайтов РИА Новости\n";
milu@ubuntu: ~/Milu/Dev/Perl > perl wide-char-in-print.pl
Wide character in print at wide-char-in-print.pl line 5.
Группа сайтов РИА Новости
源包含西里尔字符,因此utf8 杂注是有序的。但是,要将这些字符打印到终端,STDOUT 还必须设置为 UTF-8,您可以通过调用 binmode 来实现。如果您不这样做,则会触发警告,因为宽(Unicode 超过 0x255)字符不适合窄(字节)输出通道。它看起来仍然正确,因为 Perl 只会按原样输出字节,然后恰好看起来正确。
【讨论】:
no warnings 'utf8';
但最好弄清楚您收到警告的原因并解决根本问题。这两个警告表明您的脚本出现问题。抑制警告不会修复错误。
【讨论】: