Schrift
[thread]12739[/thread]

unicode utf8

Leser: 3


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
betterworld
 2008-11-10 16:17
#116148 #116148
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Vermutlich auch als zwei Bytes und als ein String der Länge 2. Es kann aber anders aussehen, wenn die Umgebungsvariable PERL_UNICODE gesetzt ist; außerdem kannst Du beim Öffnen der Datei explizit einen IO-Layer angeben, um den Zeichensatz umzuwandeln.

Du kannst herausfinden, wie der String abgespeichert ist:
Code: (dl )
1
2
use Devel::Peek;
Dump $string;
Gast Gast
 2008-11-10 11:40
#116155 #116155
Hi,

ein utf8 codiertes "ä" ist auf der Platte mit "11000011 10100100" gespeichert.
Wenn ich die Datei mit dem "ä" mit Perl mit "open FH, Datei" öffne, wie sieht das "ä" im Arbeitsspeicher binär aus?
Gast Gast
 2008-11-13 12:22
#116215 #116215
Wenn ich Textdateien in utf8 speichere, kann ich meine Perlskripte so anfangen?

Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use warnings;
use strict;

use utf8;
use open ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
moritz
 2008-11-13 19:47
#116223 #116223
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ja, kannst du.
Allerdings dekodiert das auch nicht alles, z.B. Umgebungsvariablen, Kommandozeilenparameter (@ARGV) usw. müssen gegebenfalls noch durch Encode::decode bzw. ::encode geschickt werden.
Struppi
 2008-11-14 10:29
#116237 #116237
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-11-13 11:22:10--
Wenn ich Textdateien in utf8 speichere, kann ich meine Perlskripte so anfangen?

Kannst du, musst du aber nicht. Mit use utf8 sagst du nur dem Parser, das dein Quellcode in utf-8 ist und entsprechend behandelt werden möchte. Wenn es nur um das abspeichern von utf-8 Daten geht reicht im Prinzip:
Code (perl): (dl )
1
2
3
4
my $str = 'öäü';
open F, '>test.txt';
print F $str;
close F;
Gast Gast
 2008-11-14 14:37
#116250 #116250
Ok, meistens gehts ohne auch. Vermutlich wird das deshalb so selten thematisiert.
Probleme gabs z.B. wenn "\w" keine Umlaute berücksichtigt hat.
Das hab ich jetzt auch mithilfe dieser Steite zum Laufen bekommen.
http://perlgeek.de/de/artikel/charsets-unicode
Gast Gast
 2008-11-17 17:45
#116334 #116334
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use warnings;
use strict;

use locale;


print +(sort grep /\w/, map { chr } 0..255), "\n";


Was braucht es hier noch, damit "grep \w" die Umlaute durchlässt?
(locale = "de_DE.UTF-8")
Taulmarill
 2008-11-17 17:56
#116336 #116336
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Dafür musst du wahrscheinlich noch die Umgebungsvariable LC_ALL setzen. Nachdem ich diese auf de_DE gesetzt hatte, funktionierte es bei mir. Bekomme da aber nicht nur Umlaute, sondern eine ganze Menge "seltsamer" Zeichen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Gast Gast
 2008-11-17 18:42
#116339 #116339
Das ist alles so kompliziert.

Warum bekomme ich mit LC_ALL = "de_DE" Umlaute (und mehr), mit LC_ALL = "de_DE.utf8" aber keine Umlaute mehr?
Linuxer
 2008-11-17 19:13
#116341 #116341
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Weil UTF-8 eine andere Kodierung der Umlaute vornimmt und sie somit nicht mehr im angegebenen Bereich liegen?

edit: Mehr dazu findet sich u.a. bei Wikipedia - UTF-8
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-11-10 11:40.