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

Cornelius Amzar cornelius.amzar at bsz-bw.de
Fri Nov 24 16:30:50 CET 2017


Hallo Johann,

hat geklappt, danke!

Das mit Pica::Data werde ich mal probieren, habe momentan allerdings 
viel auf dem Tisch...

Wir haben uns allerdings bewußt gegen Catmandu entschieden, weil wir mit 
den Filtern in Catmandu nicht klarkamen. Wir bauen sehr umfangreiche 
Konverter und das geht eben am besten mit Perl und Klassenhierarchie.

Ebenfalsl ein erholsames WE!

Cornelius



Am 24.11.2017 um 15:14 schrieb Rolschewski, Johann:
> 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

-- 

Cornelius Amzar
Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
78457 Konstanz / Germany
E-Mail: cornelius.amzar at bsz-bw.de
http://www.bsz-bw.de

-------------- n�chster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-bielefeld.de/mailman2/unibi/public/librecat-dev/attachments/20171124/096cdd74/attachment.html>


More information about the librecat-dev mailing list