2013-01-22 13 views
1

當我運行這個腳本(或類似的腳本與DBD :: SQLite或DBD :: MySQL),它看起來像返回的錯誤消息不解碼。
是否通常輸出到STDERR未解碼?是否通常輸出到STDERR未解碼?

#!/usr/bin/env perl 
use warnings; 
use strict; 
use utf8; 
use open qw(:encoding(UTF-8) :std); 
use DBI; 

my $dbh = DBI->connect("DBI:Pg:dbname=my_test_db", 'username', 'password', { 
    PrintError => 0, 
    RaiseError => 1, 
    AutoCommit => 1, 
    pg_enable_utf8 => 1, 
}) or die DBI->errstr; 

my $sth = $dbh->prepare("S☺LECT * FROM abteilung"); 
$sth->execute(); 

輸出:

#DBD::Pg::st execute failed: FEHLER: Syntaxfehler bei »SâºLECT« 
#ZEILE 1: SâºLECT * FROM abteilung 
#  ^at ./perl2.pl line 16. 
+1

你確定你的輸出控制檯支持該編碼嗎? STDIN輸出是否正確? – m0skit0

+0

STDIN輸出正確。 –

回答

2

這也可能是雙重編碼的情況。驅動程序使用UTF-8對查詢進行編碼,然後將該查詢包含在錯誤消息中,然後將其正確地編碼爲輸出。

+0

我可以在不禁用'binmode STDERR'的情況下解決這個問題:encoding(UTF-8)';'? –

+0

你必須看看司機,但值得懷疑。 – ikegami