cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > Knowledge Base > UTF-8 String zu Latin-1 konvertieren

UTF-8 String zu Latin-1 konvertieren

Wie kann man einen UTF-8 codierten String bzw. Datei ins Latin-1 Format konvertieren?

Folgende Subroutine erledigt genau diese Aufgabe:

sub utfDecode { # $outputtext=&utfDecode($inputtext); UTF-8 --> Latin-1
  my $string = shift;
  $string =~ s/([\xe0-\xef])([\x80-\xbf])([\x80-\xbf])/"&#".(((ord($1) & 0x1f)*64+(ord($2) & 0x3f))*64+(ord($3) & 0x3f)).";"/gex;
  $string =~ s/([\xc4-\xdf])([\x80-\xbf])/"&#".((ord($1) & 0x1f)*64+(ord($2) & 0x3f)).";"/gex;
  $string =~ s/([\xc0-\xc3])([\x80-\xbf])/chr(((ord($1) & 0x03) << 6) | (ord($2) & 0x3f))/gex;
  return $string;
}

Um den Inhalt einer Variable zu konvertieren, genügt folgender Aufruf:
$output=&utfdecode($input);

Bei einer kompletten Datei, sähe das dann so aus:

open(INPUT,$inputfile);
open(OUTPUT,">".$outputfile);
while (<INPUT>) {
  print &utfdecode($_);
close(INPUT);
close(OUTPUT);

Autor: Jürg Sommer, knowledge@cgicorner.ch

[ zurück ]