Schrift
[thread]12533[/thread]

Wie erkläre ich Perl, dass ein String UTF-8-kodiert ist?

Leser: 1


<< >> 3 Einträge, 1 Seite
Stephan198
 2008-09-23 15:52
#114867 #114867
User since
2008-09-23
2 Artikel
BenutzerIn
[default_avatar]
Ich möchte eine UTF-8-codierte HTML-Seite mit CURL laden und weiterverarbeiten, aber Perl erkennt nicht, dass die Seite / der String UTF-8-codiert ist.
Will ich also etwas in dem String matchen, das z.B. Umlaute enthält, erhalte ich kein Ergebnis, da Perl mehrbytige Unicode-Zeichen nicht als ein Zeichen begreift.

Beispiel: der Wikipedia-Artikel "Brügg"

Code (perl): (dl )
1
2
3
4
5
6
7
$backticks = `curl http://de.wikipedia.org/wiki/Br%C3%BCgg`;    

@funde = $backticks =~ m/Br\wgg/gs;
print "@funde\n";

use DBI;
print DBI::data_string_desc($backticks)."\n";


Das Resultat ist unvollständig:
Code: (dl )
1
2
Brugg
UTF8 off, non-ASCII, 29731 characters 29731 bytes


Dabei ist es prinzipiell möglich! Geht man den Umweg über eine Datei und sagt Perl, diese sei als UTF-8 einzulesen, dann flutscht die Sache. Fortsetzung des obigen Codes:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
open (WRITE, ">test.txt"); 
print WRITE $backticks;
close WRITE;
$datei = "";
open (READ, "<:utf8", "test.txt");
while (<READ>) { $datei = $datei . $_ }
close (READ);

@funde = $datei =~ m/Br\wgg/gs;
print "@funde\n";

print DBI::data_string_desc($datei)."\n";


Resultat:
Code: (dl )
1
2
Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brügg Brugg Brügg Brügg Brügg Brügg Brügg Brügg Brügg
UTF8 on, non-ASCII, 29592 characters 29731 bytes


* Wie spare ich mir also den lästigen Umweg über die Datei, und sage Perl, dass es $backticks als utf-8 interpretieren soll?

Danke und Gruß
moritz
 2008-09-23 16:06
#114868 #114868
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Mit dem Modul CPAN:Encode und dessen Funktion decode() bzw. decode_utf8().

Übrigens ist '<:encoding(UTF-8)' sicherer als '<:utf8'. Letzteres kann bei kaputtem UTF-8 zu sehr unangenehmen Ergebnissen führen.
Stephan198
 2008-09-23 16:48
#114869 #114869
User since
2008-09-23
2 Artikel
BenutzerIn
[default_avatar]
Super, danke, funktioniert prima!
<< >> 3 Einträge, 1 Seite



View all threads created 2008-09-23 15:52.