1

このスクリプト (または DBD::SQLite または DBD::MySQL を使用した同様のスクリプト) を実行すると、返されたエラー メッセージがデコードされていないように見えます。
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.
4

1 に答える 1

2

おそらく二重エンコードのケースです。ドライバーは、UTF-8 を使用してクエリをエンコードし、そのクエリをエラー メッセージに含め、出力用に (適切に) エンコードしました。

于 2013-01-22T23:54:45.373 に答える