Thread Wie erkläre ich Perl, dass ein String UTF-8-kodiert ist? (2 answers)
Opened by Stephan198 at 2008-09-23 15:52

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ß

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