Headerbild: UTF-8 – Multi-Byte-Zeichenverarbeitung

UTF-8 – Multi-Byte-Zeichenverarbeitung


UTF-8 – Multi-Byte-Zeichenverarbeitung ist ein aktuelles Programmierthema. Noch vor wenigen Jahren waren wir froh und glücklich, wenn wir mittels unserer Tastatur die Zeichen eingeben konnten, die wir zur Erstellung von Texten in unserer jeweiligen Landessprache benötigten. 256 verschiedene Zeichen standen, inklusive der nicht druckbaren Steuerzeichen, zur Verfügung. Das war in der Regel hinreichend. Unangenehm wurde es nur, wenn wir Texte in anderen Landessprachen bekamen, die Zeichen enthielten, die nicht in unserem Zeichensatz enthalten waren. UTF-8 und Co. machen zwar das Leben für Endanwender leichter, erfordern aber anderseits vom Programmierer eine Multi-Byte-Zeichenverarbeitung.

Insbesondere Programmieranfänger raufen sich die Haare. Hatten wir früher verlässlich ein einzelnes Byte zur Zeichenkodierung, so sind wir heute mit so genannten Multi-Byte-Zeichensätzen konfrontiert. Der ehedem zur Zeichendarstellung verwendete Datentyp, bei Free Pascal beispielsweise Char oder char in C/C++, funktioniert nicht mehr zuverlässig. Ein Char, besitzt nur ein Byte, eine Eigenschaft, die sich dieser Datentyp mit den meisten Zeichendatentypen anderer Programmiersprachen teilt. Wollen wir einzelne Zeichen untersuchen, so treffen wir vielfach auf Zeichen, die sich mit diesem Datentyp nicht darstellen lassen. Noch viel schlimmer ist es, dass wir ohne penible Analyse dessen, was wir in den Händen halten, nicht einmal wissen, wie viele Bytes ein Zeichen überhaupt hat. In der weit verbreiteten UTF-8-Kodierung können Zeichen nämlich ein bis vier Bytes belegen. Das macht die Welt für den Programmierer nicht eben einfacher! – Die einschlägigen Internetforen sind deshalb voll mit Fragen zur Verarbeitung von Multi-Byte-Zeichen.

Leserprofil

Jeder, der programmiert, ist mit dem Problem der Zeichenverarbeitung konfrontiert. Insbesondere für Programmieranfänger stellt die Verarbeitung von Multi-Byte-Zeichen oftmals ein Problem dar. Weil der Beitrag setzt grundlegende Programmierkenntnisse voraus.

Inhalt

Ausgehend von einer Erläuterung von Unicode und dessen unterschiedlicher Kosierungen, wird insebsondere auf die Kodierung UTF-8 eingegangen. Diese finden wir regelmäßig in Unix-Betriebssystemen, wie beispielsweise Gnu/Linux oder macOS. Der Beitrag zeigt, wie auf einzelne Zeichen zugegriffen werden kann, wie diese gezählt und sortiert werden können.

Als Programmiersprache wird in diesem Artikel Free Pascal verwendet. Compiler sind sowohl für Microsoft Windows, als auch für Gnu/Linux und macOS gratis verfügbar.

Download bei SourceForge: https://sourceforge.net/projects/freepascal/

Der Leser kann die Beispielcodes einfach am heimischen Rechner nachvollziehen. Free Pascal ist ein Nachfolger der Programmiersprache Pascal, die von Niklaus Wirth ehedem als Lehrsprache entworfen wurde. Die Syntax ist deshalb so beschaffen, dass auch Nicht-Pascal-Programmierer die Programme leicht verstehen und nötigenfalls einfach in die von Ihnen bevorzugte Programmiersprache übersetzen können.

Als Beispiel für die Übertragbarkeit den vermittelten Wissens enthält der Beitrag auch ein in C formuliertes Beispielprogramm.

Download

Weil die Ausführungen für eine Webseite zu umfangreich sind, stellen wir Ihnen den Beitrag als PDF-Datei zur Verfügung.

DOWNLOAD

 

Karsten Brodmann

Karsten Brodmann

Karsten Brodmann hat an der Universität Osnabrück BWL/Wirtschaftsinformatik studiert. Er hat viele Jahre in der IT gearbeitet und dort Web- und Datenbankanwendungen entwickelt. Seit Gründung der Punkt-Akademie veröffentlicht Karsten Brodmann auch Schulungsvideos zur Datenbankentwicklung, Unix und Programmierung bei Udemy. In seiner Freizeit fotografiert Karsten Brodmann gerne. Seit vielen Jahren fotografiert er analog und digital. Dabei behält er jeweils den gesamten Workflow in der eigenen Hand, von der Aufnahme über die Dunkelkammer oder auch den Scanner sowie die Bildbearbeitung und den Ausdruck am PC.

Weitere Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert