Thread View: pl.comp.bazy-danych
4 messages
4 total messages
Started by Czarek Grądys
Tue, 23 Jun 2015 09:41
PostgreSQL - perl DBI problem z kodowaniem UTF8
Author: Czarek Grądys
Date: Tue, 23 Jun 2015 09:41
Date: Tue, 23 Jun 2015 09:41
84 lines
3135 bytes
3135 bytes
Mam taki problem:
Czytam skryptem perlowym z bazy danych i w liniach zawierających 'Pokój'
mam inne kodowanie niż w reszcie.
Skrypt mniej więcej taki:
#!/usr/bin/perl
use utf8;
use DBI;
use Config::Tiny;
# use strict;
my $driver = "Pg";
my $host = 'localhost';
my $port = 5432;
my $userid = 'czarek';
my $database = 'pomiary';
my $password = '';
# Połączenie z bazą
local $dsn = "DBI:$driver:dbname=$database;host=$host;port=$port";
local $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
# .......
# .......
# to poniżej w pętli:
$stmt = qq(SELECT
rank() OVER(ORDER BY trim(p.nazwa),trim(p.opis||'
'|| nazwa_punktu)) AS lp,
trim(p.nazwa) AS lokalizacja,
trim(p.opis||' '|| nazwa_punktu) AS nazwa,
n.wartosc,
pomiar,
CASE WHEN pomiar >= n.wartosc THEN 'TAK' ELSE 'NIE' END
-- n.opis AS norma
FROM
pomieszczenie p
JOIN
wynik_osw w ON (p.id=w.id_pom)
JOIN
norma_osw n ON (n.id=w.id_norm)
WHERE
n.id <> 22 -- nie mierzyc
AND trim(poziom) = '$pietro';
);
$sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
exit -1;
}
while(my @row = $sth->fetchrow_array()) {
my $lp = $row[0];
my $nr_obw = $row[1];
my $nazwa_urzadz = $row[2];
my $zabezp = $row[3];
my $wynik = $row[4];
my $tak_nie = $row[5];
print PLIK "$lp & $nr_obw & $nazwa_urzadz & $zabezp & $wynik &
$tak_nie \\\\\n \\hline\n";
}
W psql to zapytanie daje dobre wyniki, niestety tu coś nie gra i linie
mające w p.opis = 'Pokój%' wychodzą w innym kodowaniu niż reszta. Jak
się nie uda rozwiazać problemu, to najwyżej zamienię ten Pokój na Pokoj,
ale to mało elegancko na wydruku będzie.
--
Cezary Grądys
czarekgr@wa.onet.pl
Re: PostgreSQL - perl DBI problem z kodowaniem UTF8
Author: Czarek Grądys
Date: Tue, 23 Jun 2015 10:12
Date: Tue, 23 Jun 2015 10:12
21 lines
1724 bytes
1724 bytes
W dniu 23.06.2015 o 11:41, Czarek Grądys pisze: > Mam taki problem: > Czytam skryptem perlowym z bazy danych i w liniach zawierających 'Pokój' > mam inne kodowanie niż w reszcie. > Problem już rozwiązany, trzeba było dać po otwarciu pliku binmode: open (PLIK , ">$plik") or die "nie moge otworzyc pliku"; binmode PLIK, ":encoding(utf8)"; Ciekawe tylko, dlaczego źle było tylko z tym pokojem, 'ó' występowało w innych wyrazach i szlo dobrze. -- Cezary Grądys czarekgr@wa.onet.pl
Re: PostgreSQL - perl DBI problem z kodowaniem UTF8
Author: hubert depesz lubaczewski
Date: Tue, 23 Jun 2015 11:09
Date: Tue, 23 Jun 2015 11:09
36 lines
1944 bytes
1944 bytes
On 2015-06-23, Czarek Grądys <czarekgr@wa.onet.pl> wrote:
> Skrypt mniej więcej taki:
> #!/usr/bin/perl
> use utf8;
> use DBI;
> use Config::Tiny;
Ja wiem, że długie, ale przeczytaj proszę:
https://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/
pytanie, i pierwszą odpowiedź (tchrist'a).
Ja po tym po prostu mam taki "boilerplate" dla wszystkich skryptów
perlowych:
#v+
# UTF8 boilerplace, per http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/
use v5.14;
use strict;
use warnings;
use warnings qw( FATAL utf8 );
use utf8;
use open qw( :std :utf8 );
use Unicode::Normalize qw( NFC );
use Unicode::Collate;
use Encode qw( decode );
if ( grep /\P{ASCII}/ => @ARGV ) {
@ARGV = map { decode( 'UTF-8', $_ ) } @ARGV;
}
# If there is __DATA__,then uncomment next line:
# binmode( DATA, ':encoding(UTF-8)' );
# UTF8 boilerplace, per http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/
#v-
To rozwiązuje większość problemów.
depesz
Re: PostgreSQL - perl DBI problem z kodowaniem UTF8
Author: Czarek Grądys
Date: Tue, 23 Jun 2015 12:57
Date: Tue, 23 Jun 2015 12:57
22 lines
1732 bytes
1732 bytes
W dniu 23.06.2015 o 13:09, hubert depesz lubaczewski pisze: > On 2015-06-23, Czarek Grądys <czarekgr@wa.onet.pl> wrote: >> Skrypt mniej więcej taki: >> #!/usr/bin/perl >> use utf8; >> use DBI; >> use Config::Tiny; > > Ja wiem, że długie, ale przeczytaj proszę: > https://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/ > pytanie, i pierwszą odpowiedź (tchrist'a). > > Ja po tym po prostu mam taki "boilerplate" dla wszystkich skryptów > perlowych: > Dzięki na pewno się przyda. -- Cezary Grądys czarekgr@wa.onet.pl
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads