Thread Wie erkläre ich Perl, dass ein String UTF-8-kodiert ist?
(2 answers)
Opened by Stephan198 at 2008-09-23 15:52
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: 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 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 * 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ß |