Unicode

Einführung

Unicode ist ein Ausdruck, der für erweiterte Zeichensätze verwendet wird, welche das Anzeigen von Text in vielen Sprachen (einschließlich derer mit vielen verschiedenen Zeichen wie japanisch, koreanisch usw.) ermöglichen. Damit wird das ASCII Problem behoben, dass viele verschiedene (Zeichensatz-) Tabellen für jede Sprache bestehen, indem eine einheitliche Tabelle genutzt wird, in der jedes Zeichen seinen eigenen Platz hat. Wenn eine Anwendung in solchen Ländern verwendet werden soll, ist beim Start der Entwicklung die Nutzung des Unicode-Modus äußerst empfehlenswert, da dadurch die Anzahl an Bugs - bedingt durch die Umwandlung von ASCII nach Unicode - reduziert wird.

Vereinfachend kann Unicode als eine große ASCII-Tabelle angesehen werden, welche keine 256 sondern bis zu 65536 Zeichen beinhaltet. Jedes Zeichen in Unicode braucht auf diese Art 2 Bytes in Speicher (dies ist wichtig zu wissen, zum Beispiel beim Verwenden von Zeigern). Der spezielle Variablentyp 'Character' (.c) von PureBasic schaltet automatisch von 1 Byte auf 2 Bytes um, wenn Unicode aktiviert ist.

Hier einige Links, damit Sie ein besseres Verständnis über Unicode erhalten (sollten unbedingt gelesen werden):

Allgemeine Unicode Informationen
Unicode und BOM

Um zu überprüfen, ob ein Programm im "Unicode-Modus" kompiliert wurde, können Sie die Compiler-Direktiven mit der #PB_Compiler_Unicode Konstante verwenden. Um ein Programm im "Unicode-Modus" zu kompilieren, kann die entsprechende Option in den den Compiler-Optionen gesetzt werden.

Unicode und Windows

Auf Windows verwendet PureBasic intern die UCS2 Verschlüsselung, die das von der Windows Unicode API verwendete Format darstellt, wodurch während der Laufzeit beim Aufruf von OS-Funktionen keine Umwandlungen erforderlich sind. Bei der Nutzung einer API-Funktion verwendet PureBasic automatisch die entsprechende Unicode-Funktion, wenn eine solche verfügbar ist (zum Beispiel wird MessageBox_() auf MessageBoxW() im Unicode-Modus und MessageBoxA() im ASCII-Modus umgeschalten). Alle API-Strukturen und Konstanten, die von PureBasic unterstützt werden, schalten auch automatisch auf ihre Unicode-Version um. Das bedeutet, dass der gleiche API-Code sowohl in Unicode als auch in ASCII ohne jede Änderung kompiliert werden kann.

Unicode wird nativ nur auf Windows NT und später (Windows 2000/XP/Vista) unterstützt: ein Unicode-Programm wird nicht auf Windows 95/98/Me funktionieren. Es gibt eine Lösung mit der Verwendung der 'Unicows' Wrapper DLL, diese wird jedoch noch nicht von PureBasic unterstützt. Wenn der Windows 9x Support benötigt wird, ist es am besten, zwei Versionen des Executables anzubieten: eines im ASCII-Modus kompiliert und ein weiteres im Unicode-Modus. Da hierfür lediglich ein Compiler-Switch anzugeben ist, können Sie das ziemlich schnell bewerkstelligen.

UTF-8

UTF-8 ist eine weitere Unicode Verschlüsselung, die Byte basierend ist. Im Gegensatz zu UCS2, das immer 2 Bytes pro Zeichen nutzt, verwendet UTF-8 eine variable Längenverschlüsselung für jedes Zeichen (bis zu 4 Bytes können ein Zeichen darstellen). Der größte Vorteil von UTF-8 ist die Tatsache, dass es keine Null-Zeichen in seiner Kodierung enthält, so dass sie wie eine reguläre Textdatei editiert werden kann. Auch die ASCII-Zeichen von 1 bis 127 bleiben immer erhalten, womit der Text stets lesbar bleibt, da nur spezielle Zeichen kodiert werden. Ein Nachteil ist seine variable Länge, wodurch alle String-Operationen langsamer ausgeführt werden, aufgrund der notwendigen Vorverarbeitung ("Pre-Processing") zum ausfindig machen eines Zeichens im Text.

PureBasic nutzt UTF-8 standardmäßig beim Schreiben von Strings in Dateien im Unicode Modus (File und Preference Bibliothek), wodurch alle Texte vollständig cross-plattform kompatibel sind.

Der PureBasic Compiler behandelt sowohl ASCII als auch UTF-8 Dateien (die UTF-8 Dateien müssen den richtigen BOM Header besitzen, um korrekt behandelt zu werden). Beide können ohne Probleme in einem einzelnen Programm gemischt werden: ein ASCII-Programm kann eine UTF-8 Datei beinhalten und umgekehrt. Beim Entwickeln eines Unicode-Programms ist es empfehlenswert, die IDE im UTF-8 Modus einzusetzen, so dass alle die Quellcode-Dateien bereit für Unicode sind. Da das UTF-8 Format kein Problem damit hat, wenn nur ASCII-Programme entwickelt werden, ist es nicht notwendig, diese Einstellung zurückzusetzen.