<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>