Tobi's Blog

Zeichensatzdetektor

Erstellt von Tobi am Montag 14. November 2005

Mal ein, zugegeben sehr unschöner und keinesfalls professioneller, Ansatz, den Zeichensatz eines Textes zu identifizieren

#!/usr/bin/perl
use strict;
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
my $uuml = 'ü'; # Erwartetes Zeichen
my $code = 129; # Code des unbekannen Zeichensatzzeichens
my @character_sets = utf8_supported_charset; # List available character set encodings
my $char = chr($code);
foreach my $charset (@character_sets) {
my $utf8 = Unicode::MapUTF8::to_utf8({ -string => $char, -charset => $charset });
# from $charset
if (ord($uuml) == ord(Unicode::MapUTF8::from_utf8({ -string => $utf8, -charset => 'iso-8859-1' }))) {
warn $charset;
}
}

Es gibt aber schon Tools, die genau das leisten:
Charset-Detect via Java
Diverse Tools für Perl

Ein Problem gibt es noch mit dem automatischen Abschneiden von Inhalten. Versucht man, einen UTF-8 String auf eine konkrete Länge zu kürzen, kann es passieren, dass man ein 2-Byte-Zeichen genau in der Mitte teild. Ergebniss ist im günstigsten Fall dann ein unschönes Viereck am Ende des Strings, im schlechtesten fall ein Steuerzeichen, dass weitere Inhalte verschwinden lässt. Hierfür bietet der Quellcode von Lingua::DetectCharset da immerhin ein paar Ansätze.

Es gibt einen neuen Ansatz für einen Detektor für Zeichensätze. Mal sehen, was das ergibt.

2 Kommentare zu “Zeichensatzdetektor”

  1. Sven sagt:

    Hast du schon eine Lösung für dieses Problem gefunden?

  2. tobi sagt:

    Es gibt da leider immer noch keine wirklich 100%tige Lösung. Einzig Encode::Guess liefert einen recht sicheren Ansatz zur Lösungsfindung. Allerdings ist die Schnittstelle des Modules recht … wie soll ich sagen … gewöhnungsbedürftig. Findet es einen konkreten Zeichensatz, bekommt man das Objekt. Gibt es mehrere Möglichkeiten, bekommt man einen String ala “iso-8859-1 or iso-8859-15 or…” zurück. Argl!

    Ansonsten hab ich von nichts besserem gehört. Die PerlMonks wussten auch nicht mehr-> siehe http://perlmonks.org/?node_id=611577

Kommentar schreiben

XHTML: Sie können diese Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>