Thread Byte raw format in String umwandeln (Glib::IO::File->get_contents) (18 answers)
Opened by Max_Perlbeginner at 2016-05-31 10:53

Max_Perlbeginner
 2016-05-31 18:36
#184861 #184861
User since
2016-04-04
107 Artikel
BenutzerIn
[default_avatar]
Lieber Janus,
lieber Raubtier,

Herzlichen Dank für Eure Hilfe und v.a. für Eure schier unendliche Geduld!!!! Vor allem, lieber Raubtier, Danke für den Artikel, der endlich (hoffe ich) das Brett vor meinem Kopf weggenommen hat. Ich dachte immer, der Bytestring, das seien die Zahlen und nicht ein Textstring, der eben noch nicht dekodiert wurde. Das war der Denkfehler ;-)

Ich konnte es nun mit diesen zwei Schritten lösen:
Für das Öffnen der Datei:
Code: (dl )
1
2
3
4
# Zunächst wandeln wir die Bytes in einen Bytestring um
my $content = pack "C*", @{$raw_content};
# Diesen Bytestring dekodieren wir in das utf8 Format
my $content_utf8 = decode('utf-8', $content);


Für das Speichern der Dateien
Code: (dl )
1
2
3
4
# Den Textstring im UTF8 Format in einen Bytestring umwandeln
my $content_utf8 = encode('utf-8', $content);
# Den Bytestring wieder in Bytes umwandeln
my @contents = unpack "C*", $content_utf8;


Noch einmal allen Helfern tausend Dank!!!
Falls jemand noch mit mir Geduld hat, zwei Fragen hätte ich (auch wenn ich den Thread jetzt als gelöst markiere):

1) Was macht denn das Pragma use utf8;, wenn ich trotzdem vor dem Speichern den Bytestring mit encode('utf-8', $content) extra ins utf8 Format umwandeln muss?

2) Was ist nun der Unterschied zwischen dem Template 'C*' und 'U*' bei der pack Funktion? Es klappt beides bei mir. Doch welches wäre hier das Richtige?

View full thread Byte raw format in String umwandeln (Glib::IO::File->get_contents)