由於各種原因,我從舊版腳本中收到錯誤消息Malformed UTF-8 character
和 Wide character in print
。如何在Perl中抑制UTF-8警告?
我想禁止/禁用這兩個警告,以便它們不寫入STDERR
。
我該怎麼做?
由於各種原因,我從舊版腳本中收到錯誤消息Malformed UTF-8 character
和 Wide character in print
。如何在Perl中抑制UTF-8警告?
我想禁止/禁用這兩個警告,以便它們不寫入STDERR
。
我該怎麼做?
no warnings 'utf8';
但最好弄清楚爲什麼你會收到警告並解決潛在的問題。這兩個警告表明您的腳本中出現了問題。抑制警告不會解決錯誤。
這裏有兩個例子來幫助你理解錯誤:
[email protected]: ~/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";
[email protected]: ~/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。
[email protected]: ~/Milu/Dev/Perl > cat wide-char-in-print.pl
use utf8;
use strict;
use warnings;
# binmode STDOUT, ':utf8';
print "Группа сайтов РИА Новости\n";
[email protected]: ~/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只會輸出字節,因此看起來正確。
曾與調試輸出從log4perl在Windows PowerShell控制檯使用Perl同樣的問題
Wide character in print at C:/strawberry/perl/site/lib/Log/Log4perl/Appender/Screen.pm line 39.
的解決方案是(在log4perl配置文件)
log4perl.appender.Screen.utf8 = 1
在我看來
這是最好的答案因爲與其告訴新程序員如何關閉「煩人」警告,如果您不明白爲什麼要獲取這些警告,則不應該這樣做,它會告訴您如何防止首先獲取警告。大多數警告都會幫助您解決問題。我聽說99.999%的時間,程序員,而不是計算機/編譯器/解釋器是問題所在。關閉這個警告很容易,但要養成關閉煩惱的習慣是一個不好的說法。 – osirisgothra 2014-09-16 16:01:26