Zeichencodierungen

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Eine Zeichencodierung (character encoding) ist an sich lediglich eine Vereinbarung, wie Bytes mit verschiedenen Werten interpretiert werden sollen. Ein Byte mit dem dezimalen Wert 110 wird in der ASCII-Codierung als ›n‹ interpretiert, in EBCDIC allerdings als ›>‹. Warum ist das so? Weil das zu irgendeinem Zeitpunkt von irgendeiner Organisation so beschlossen wurde – keine Codierung ist inhärent besser als die andere. Das Byte ist das Gleiche, nur die Interpretation ist eine andere.

Im ASCII-Zeichensatz ist nur die Hälfte der in einem Byte möglichen Werte definiert. Im ISO-8859-1-Zeichensatz (auch Latin-1 genannt) ist die andere Hälfte mit akzentuierten Zeichen und ein paar Spezialzeichen besetzt, die diesen Zeichensatz für Mitteleuropa geeignet machen. In dieser Zeichencodierung wird das Zeichen mit dem dezimalen Wert 234 als ê interpretiert, in ASCII ist es nicht definiert.

Für uns ergibt sich die Frage: Wie bringen wir das Perl-Programm dazu, eine Reihe von Bytes nach einer bestimmten Zeichencodierung zu interpretieren? Wenn wir vier Bytes mit den dezimalen Werten 234, 116, 101 und 115 haben, die wir nach Latin-1 interpretieren (sie entsprechen dann dem französischen Wort »êtes«), dann wollen wir, dass die regulären Ausdrücke ˹^\w+$˼ und \b passen. Das funktioniert nur dann, wenn die Metazeichen \w und \b wissen, wie man mit Latin-1-Zeichen umgeht.

Unterstützung von Zeichencodierungen

Es gibt eine große Anzahl von Zeichencodierungen. Wenn Sie eine bestimmte verwenden, müssen Sie abklären, ob das Programm diese unterstützt:

  • Versteht das Programm die Zeichencodierung?
  • Wie sage ich dem Programm, welche Zeichencodierungen ich benutzen will?
  • Wie reichhaltig ist die Regex-Unterstützung dafür?

Die Regex-Unterstützung kann man in Unteraspekte aufgliedern:

  • Werden Multibyte-Codierungen unterstützt? Passen Ausdrücke wie der Punkt oder [^x] auf einzelne Zeichen oder auf Bytes?
  • Verstehen die Metazeichen \w, \d, \s, \b usw. die im Zeichensatz enthaltenen Zeichen? Wenn ê als alphabetischer Buchstabe interpretiert wird, wird das auch von \w und \b honoriert?
  • Wird versucht, die Interpretation von Bereichen in Zeichenklassen zu erweitern? Wird ê von ˹[a-z]˼ erkannt?
  • Wenn Groß- und Kleinschreibung ignoriert werden, funktioniert das mit allen Zeichen? Werden dann beispielsweise ê und Ê gleich behandelt?

Manche dieser Fragen sind komplizierter, als sie scheinen. Das java.util.regex-Package von Sun beispielsweise versteht alle alphabetischen Unicode-Zeichen, die in Wörtern vorkommen, und dennoch passt \w nur auf die Zeichen aus dem 7-Bit-ASCII-Code. Sie werden später in diesem Kapitel noch anderen Beispielen begegnen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln