[librecat-dev] Problem mit Encoding in PICA:Writer

Rolschewski, Johann Johann.Rolschewski at sbb.spk-berlin.de
Fri Nov 24 15:14:19 CET 2017


Hi Cornelius,

das Encoding-Problem bereitet Config::IniFiles, die Daten werden beim Einlesen nicht dekodiert, wie Du der Ausgabe von Devel::Peek entnehmen kannst: $value fehlt der UTF8-FLAG. Wenn Du die Werte 
 aus der Config mit Encode dekodierst funktioniert es. Verwende beim Einlesen und Ausgeben von Dateien möglichst einen entsprechenden IO-Layer.

#!/usr/bin/perl

use strict;
use utf8;
use warnings;
use feature qw(say);
use Config::IniFiles;

use PICA::Record;
use PICA::Writer;
use PICA::Field;

use Encode qw(encode decode);
use Devel::Peek;

my $config = Config::IniFiles->new(
    -file    => "test.ini",
    -default => 'General'
);
my $value  = $config->val( 'General', 'param' );
my $value2 = $config->val( 'General', 'param2' );
my $value3 = 'äüöß';

# dump a raw Perl datatype

Dump $value;
Dump $value3;

# Ausgabe in Datei klappt *nicht*

open( my $fh, '>', 'output.txt' );
say $fh $value;
say $fh $value3;
close $fh;

say "RAW file written";

# Ausgabe in UTF8-Datei klappt nicht, siehe zweite Zeile
open( my $fhutf8, '>:encoding(UTF-8)', 'output_utf8.txt' );
say $fhutf8 "# raw value from Config";
say $fhutf8 $value;
say $fhutf8 "# decoded value from Config";
say $fhutf8 decode( 'UTF-8', $value );
say $fhutf8 "# UTF-8 value";
say $fhutf8 'äüöß';
close $fh;

say "UTF-8 file written";

# Ausgabe im PICA::Writer klappt nicht, Umlaute sind kaputt.
my $writer = PICA::Writer->new( 'out.pica', format => 'normalized' );
my $field  = new PICA::Field('021A');
my $record = new PICA::Record();
$field->add( 'a', $value );
$field->add( 'y', decode( 'UTF-8', $value ) );
$field->add( 'x', 'äüöß' );
$record->append($field);
$writer->write( '', $record );
$writer->end();

say "Pica file written";

Das Module PICA::Record ist "deprecated", ich empfehle die Verwendung von PICA::Data oder Catmandu::PICA. Wenn Du Fragen hast, melde Dich.

Schönes Wochenende,

Johann

> -----Ursprüngliche Nachricht-----
> Von: librecat-dev-bounces at lists.uni-bielefeld.de [mailto:librecat-dev-
> bounces at lists.uni-bielefeld.de] Im Auftrag von Cornelius Amzar
> Gesendet: Freitag, 24. November 2017 13:30
> An: librecat-dev at lists.uni-bielefeld.de
> Cc: Abedini, Tayyebeh <tayyebeh.abedini at bsz-bw.de>
> Betreff: [librecat-dev] Problem mit Encoding in PICA:Writer
> 
> Guten Tag,
> 
> ich benutze zwar kein LibreCat/Catmandu, aber die zugrunde liegenden Perl-
> Module. Herr Voß vom GBV meinte, dass ich hier Hilfe bekommen könnte.
> 
> 
> Ich habe das Problem, dass Inhalte aus einer INI-Datei zwar richtig in die
> Konsole und auch in Dateien geschrieben werden, aber nicht wenn ich
> PICA::Writer einsetze.
> 
> 
> Laut Herrn Voß liegt das daran, dass PICA::Writer intern mit Bytestrings
> arbeitet. Trotz zahlloser Versuche habe ich es nicht geschafft, diese Werte
> entsprechend an PICA::Writer zu übergeben. Finde dazu auch in der
> Dokumentation keine Hinweise, aber die scheint eh nicht so aktuell zu sein....
> 
> 
> Sowohl die Perl-Dateien, als auch die Daten sind utf8 kodiert.
> 
> 
> Ein Beispielskript finden Sie unten, die Testdaten sind im Anhang.
> 
> 
> Wäre toll, wenn jemand eine Idee hat.
> 
> 
> Viele Grüße,
> 
> Cornelius Amzar
> 
> 
> #!/usr/bin/perl
> #
> 
> use strict;
> use utf8;
> use warnings;
> use feature qw(say);
> use Config::IniFiles;
> 
> use PICA::Record;
> use PICA::Writer;
> use PICA::Field;
> 
> my $config = Config::IniFiles->new( -file => "tests/test.ini",
>         -default => 'General');
> my $writer =  PICA::Writer->new('tests/out.pica', format => 'normalized');
> my $field =   new PICA::Field('021A');
> my $record = new PICA::Record();
> 
> my $value = $config->val('General', 'param'); my $value2 = $config-
> >val('General', 'param2');
> 
> 
> # Ausgabe im Terminal klappt
> 
> say $value;
> say $value2;
> 
> # Ausgabe in Datei klappt
> 
> 
> open(my $fh, '>', output.txt');
> say $fh $value;
> close $fh;
> 
> # Ausgabe im PICA::Writer klappt nicht, Umlaute sind kaputt.
> 
> 
> $field->add('a', $value);
> $field->add('d', $value2);
> $field->add('x', 'test');
> 
> $record->appendif($field);
> 
> $writer->write('', $record);
> $writer->write('', $record);
> $writer->end();
> 
> say "Pica file written";
> 
> 
> --
> 
> 
> Cornelius Amzar
> Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
> 78457 Konstanz / Germany
> E-Mail: cornelius.amzar at bsz-bw.de <mailto:cornelius.amzar at bsz-bw.de>
> http://www.bsz-bw.de




More information about the librecat-dev mailing list