<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><font face="Times New Roman, Times, serif">Hallo Johann,</font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif">hat geklappt, danke! <br>
</font></font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif"><font face="Times New Roman, Times,
serif">Das mit Pica::Data werde ich mal probieren, habe
momentan allerdings viel auf dem Tisch... <br>
</font></font></font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif"><font face="Times New Roman, Times,
serif"><font face="Times New Roman, Times, serif">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 <font face="Times New Roman, Times, serif">und
Klassenhierarchie. <br>
</font></font></font></font></font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif"><font face="Times New Roman, Times,
serif"><font face="Times New Roman, Times, serif"><font
face="Times New Roman, Times, serif">Ebenfalsl ein
erholsames WE!</font></font></font></font></font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif"><font face="Times New Roman, Times,
serif"><font face="Times New Roman, Times, serif"><font
face="Times New Roman, Times, serif"><font face="Times
New Roman, Times, serif">Cornelius</font><br>
</font></font></font></font></font></p>
<p><font face="Times New Roman, Times, serif"><font face="Times New
Roman, Times, serif"><font face="Times New Roman, Times,
serif"><font face="Times New Roman, Times, serif"><font
face="Times New Roman, Times, serif"></font></font></font></font></font><br>
</p>
<br>
<div class="moz-cite-prefix">Am 24.11.2017 um 15:14 schrieb
Rolschewski, Johann:<br>
</div>
<blockquote type="cite"
cite="mid:f44de8cb8d5b43c0b4b08c97d46fa154@sbb.spk-berlin.de">
<pre wrap="">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
</pre>
<blockquote type="cite">
<pre wrap="">-----Ursprüngliche Nachricht-----
Von: <a class="moz-txt-link-abbreviated" href="mailto:librecat-dev-bounces@lists.uni-bielefeld.de">librecat-dev-bounces@lists.uni-bielefeld.de</a> [<a class="moz-txt-link-freetext" href="mailto:librecat-dev">mailto:librecat-dev</a>-
<a class="moz-txt-link-abbreviated" href="mailto:bounces@lists.uni-bielefeld.de">bounces@lists.uni-bielefeld.de</a>] Im Auftrag von Cornelius Amzar
Gesendet: Freitag, 24. November 2017 13:30
An: <a class="moz-txt-link-abbreviated" href="mailto:librecat-dev@lists.uni-bielefeld.de">librecat-dev@lists.uni-bielefeld.de</a>
Cc: Abedini, Tayyebeh <a class="moz-txt-link-rfc2396E" href="mailto:tayyebeh.abedini@bsz-bw.de"><tayyebeh.abedini@bsz-bw.de></a>
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-
</pre>
<blockquote type="cite">
<pre wrap="">val('General', 'param2');
</pre>
</blockquote>
<pre wrap="">
# 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: <a class="moz-txt-link-abbreviated" href="mailto:cornelius.amzar@bsz-bw.de">cornelius.amzar@bsz-bw.de</a> <a class="moz-txt-link-rfc2396E" href="mailto:cornelius.amzar@bsz-bw.de"><mailto:cornelius.amzar@bsz-bw.de></a>
<a class="moz-txt-link-freetext" href="http://www.bsz-bw.de">http://www.bsz-bw.de</a>
</pre>
</blockquote>
<pre wrap="">
</pre>
</blockquote>
<br>
<div class="moz-signature">-- <br>
<p>Cornelius Amzar<br>
Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)<br>
78457 Konstanz / Germany<br>
E-Mail: <a class="moz-txt-link-abbreviated" href="mailto:cornelius.amzar@bsz-bw.de">cornelius.amzar@bsz-bw.de</a><br>
<a class="moz-txt-link-freetext" href="http://www.bsz-bw.de">http://www.bsz-bw.de</a></p>
</div>
</body>
</html>