Development/Tutorials/Localization/Unicode (de): Difference between revisions

From KDE TechBase
(Some more translation)
(Translated the rest)
Line 31: Line 31:


== Unicode in KDE Applikationen ==
== Unicode in KDE Applikationen ==
Unicode Zeichenketten im Arbeitsspeicher ablegen und auf dem Bildschirm darzustellen ist mit Qt:String und QChar, da diese beiden Klassen, für Ihre Applikation völlig transparent, volle Unicode Unterstützung bieten.


Storing Unicode strings in memory and displaying Unicode on screen is very easy with Qt: QString and QChar provide full Unicode support transparently to your application.  
QString und QChar benutzen intern beide UTF-16. Wenn Sie Textabschnitte aus einer 8-bit Quelle lesen oder in eine schreiben (z.B. QTextStream), müssen Sie ein QTextCodec benutzen, um den Text zwischen den beiden Darstellungen zu konvertieren. Normalerweise würden Sie ein UTF-8 Codec benutzen, um eine Unicode Zeichenkette zwischen QByteArray und QString zu konvertieren.


QString and QChar both internally represent characters using UTF-16. If you read in text pieces from or write it to an 8-bit source such as QTextStream you must use a QTextCodec to convert the text between representations. Normally you would use the UTF-8 codec to convert a Unicode string between a QByteArray and a QString.
Um das passende Unicode QTextCodec zu erhalten, benutzen Sie einfach:
 
Getting an appropriate Unicode QTextCodec is quite simple:


<code cppqt n>QTextCodec Utf8Codec  = QTextCodec::codecForName("utf-8");
<code cppqt n>QTextCodec Utf8Codec  = QTextCodec::codecForName("utf-8");
Line 42: Line 41:


== Anzeige ==
== Anzeige ==
Jedes Widget das QString oder QChar zur Textdarstellung benutzt ist in der Lage Unicode Zeichen auszugeben, solange die passende Schriftart installiert ist.


Any widget that uses QString or QChar when painting text will therefore be able to show Unicode characters as long as the user has an appropriate font available.
Für eine flexible Textbearbeitung und -darstellung sehen Sie bitte auch in der Qt Dokumentation zu Rich-Text-Verarbeitung nach. Das Scribe System bietet eine Reihe von Klassen rund um die QTextDocument-Klasse an, die es einfach macht, den Unicode benutzenden, formatierten Text richtig darzustellen und zu drucken.  
 
For flexible text editing and display, consult the Qt documentation on rich text processing. The Scribe system provides a set of classes centered around the QTextDocument class that makes it easy to accurately display and print formated text, including Unicode.


== In-Memory Puffer ==
== In-Memory Puffer ==
 
Um Unicode Daten aus einem In-Memory Puffer, wie QByteArray, zu lesen, kann man die schon oben beschreibenen Codecs benutzen:
To read Unicode data from an in-memory buffer, such as a QByteArray, one can use the codecs created earlier in this section:


<code cppqt n>
<code cppqt n>
Line 60: Line 57:
QString string = Utf8Codec->toUnicode(buffer);</code>
QString string = Utf8Codec->toUnicode(buffer);</code>


Writing to a buffer looks very similar:
In einen Puffer zu schreiben sieht ähnlich aus:


<code cppqt n>
<code cppqt n>
QString string; // my Unicode text
QString string; // Mein Unicode Text
QByteArray array; // Buffer to store UTF-16 Unicode
QByteArray array; // Puffer um UTF-16 Unicode zu speichern
QTextStream textStream(array, IO_WriteOnly);
QTextStream textStream(array, IO_WriteOnly);


Line 71: Line 68:


== Dateibehandlung ==
== Dateibehandlung ==
Für das Speichern und Lesen aus und in eine Datei sollten KDE Applikationen eine Option anbieten, den Text statt im lokalen Zeichensatz in Unicode zu bearbeiten. Auf diese Art kann der Benutzer Ihrer Applikation Dokumente im lokalen Zeichensatz als Voreinstellung lesen und schreiben, gleichzeitig aber optional in Unicode. Sowohl UTF-8 als auch UTF-16 sollten unterstützt werden. Europäische Benutzer werden eher UTF-8 vorziehen, während Asiatische UTF-16 bevorzugen.


For storage and retrieval to and from a file KDE applications should provide the option to store text data in Unicode instead of the locale character set. This way the user of your application can read and save documents with the locale charset as the default while having the option to store it in Unicode. Both UTF-8 and UTF-16 should be supported. European users will generally prefer UTF-8 while Asian users may prefer UTF-16.
Unicode Daten aus einer Textdatei zu lesen wird im folgenden Beispiel demonstriert. Dabei werden die QTextCodecs benutzt, die bereits oben für UTF-8 Daten erwähnt wurden:
 
Reading Unicode data from a text file is demonstrated in the following example using the QTextCodecs we created earlier for UTF-8 data:


<code cppqt n>QTextStream textStream;
<code cppqt n>QTextStream textStream;
QString line;
QString line;


// UTF-16, if the file begins with a Unicode mark
// UTF-16, wenn die Datein mit einer Unicode Marke anfängt
// the default is ok, otherwise:
// ist die Voreinstellung ok, sonst:
// textStream.setEncoding(QTextStream::Unicode);
// textStream.setEncoding(QTextStream::Unicode);
line = textStream.readLine();
line = textStream.readLine();
Line 88: Line 84:
line = textStream.readLine();</code>
line = textStream.readLine();</code>


Writing is equally straight-forward, also using the QTextCodecs we created earlier:
Schreiben ist ähnlich einfach, ebenfalls kommen die QTextCodecs von oben zum Einsatz:


<code cppqt n>QTextStream textStream;
<code cppqt n>QTextStream textStream;
Line 102: Line 98:


== Unicode Zeicheneingabe ==
== Unicode Zeicheneingabe ==
 
In der Lage zu sein, Unicode zu laden, speichern und darstellen ist nur ein Teil des Puzzles. Ein entscheidendes Stück ist es noch, dem Benutzer die Eingabe von Unicode-Zeichen zu erlauben. Das wird im allgemeinen durch das Benutzen von Plattform-spezifischen multibyte Eingabemethoden (IM) benutzt, wie XIM auf X11. KDE bietet eine gute Unterstützung für diese Eingabemethoden über Qt und Ihre Applikation sollte nichts weiteres benötigen, um solche Eingaben zu ermöglichen.  
Being able to load, store and display Unicode is only part of the puzzle. One of the final pieces is allowing the user to input Unicode characters. This is generally solved using platform-specific multibyte input methods (IM), such as XIM on X11. KDE provides good support for these input methods via Qt and your application should not need to do anything special to enable such input.


== Einfache Unicode Dateien und Schrifttypen ==
== Einfache Unicode Dateien und Schrifttypen ==


An easy way to get Unicode sample data is to take the kde-i18n package and convert some files from there to Unicode using the <tt>recode</tt> command line tool:
Ein einfacher Weg um Unicode Beispieldaten zu bekommen ist es, das kde-i18n Paket zu nehmen und dort einige Dateien nach Unicode zu konvertieren, indem man das <tt>recode</tt> Kommandozeilen Werkzeug benutzt.


<code>recode KOI8-R..UTF-8      ru/messages/kdelibs.po
<code>recode KOI8-R..UTF-8      ru/messages/kdelibs.po
Line 113: Line 108:
recode ISO-8859-3..UTF-8  eo/messages/kdelibs.po</code>
recode ISO-8859-3..UTF-8  eo/messages/kdelibs.po</code>


The majority of operating systems today come packaged with Unicode TrueType fonts, see [http://en.wikipedia.org/wiki/Unicode_font#List_of_Unicode_fonts].
Die Mehrheit der Betriebssysteme heute haben eine Unicode TrueType Schriftart bereits dabei, siehe auch [http://en.wikipedia.org/wiki/Unicode_font#List_of_Unicode_fonts].


[[Category:Programming]]
[[Category:Programming]]

Revision as of 10:03, 21 December 2007


Development/Tutorials/Localization/Unicode


Einführung in Unicode
Anleitungsserie   Lokalisation
Voriges Kapitel   None
Nächstes Kapitel   Beim Applikationen schreiben an die Lokalisation denken
Weiterführende Texte   The Unicode website
Unicode article at Wikipedia
Unicode for Unix/Linux FAQ
Navigation   Deutsche Startseite

Zusammenfassung

Unicode ist ein Standard der für jedes Zeichen und Symbol in verschiedenen Schreibsystemen rund um die Welt eine eindeutige Nummer zur Verfügung stellt. Dadurch wird die Übersetzung von Software und Texten vereinfacht. Diese Anleitung bietet eine kurze Einführung in Unicode und wie man mit Unicode-Daten unter Qt/KDE arbeitet.

Was ist Unicode?

Unicode ist hardware-, entwicklungsplatform und sprachunabhängig. In der Version 5 gibt es Codenummern bis zu 0x10FFFF (doch nicht alle werden benutzt), die ersten 256 Einträge stimmen mit ISO 8859-1 a.k.a. ISO Latin-1 überein. Das bedeutet auch das die ersten 128 Einträge mit dem bekannten ASCII übereinstimmen. Codenummern wurden zugeordnet, um die Implementtion von bereits bestehenden Zeichensätzen zu vereinfachen, daher ist Unicode teilweise mit doppelten Zeichen belegt, damit die Übersetzungstabellen und -logiken kurz gehalten werden können.

Warum Unicode?

Benutzt man einen bestehenden Zeichensatz wie ISO 8859-15 ist es schwer, Dokumente zu erzeugen, die mehrere Sprachen beninhalten. Diese Dokumente können nur mit Personen ausgetauscht werden, die den gleichen Zeichensatz benutzen. Und auch kann haben mehrere Schreibsysteme mehr Zeichen als durch eine 8-bit Darstellung eindeutig zugewiesen werden können.

Aus diesem Grund ist Unicode die beste der möglichen Wege verschiedene Sprachen und Zeichen in einerm Dokument zu vermischen und diese Dokumente mit Personen auszutauschen, die unterschiedliche Sprachen benutzen. Unicode macht es zum Beispiel möglich so etwas wie ein Russisch-Ungarisches Wörterbuch zu schreiben.

UTF-8 und UTF-16

UTF steht für "Unicode Transformation Format". Die beiden am häufigsten verwendeten Varianten, UTF-8 und UTF-16, definieren, wie der einem Unicode-Zeichen zugeordnete Codenummer in Bits ausgedrückt wird.

In UTF-16 wird jedes Zeichen durch einen 16-bit Wert seiner Unicode-Nummer dargestellt. So ist zum Beispiel in UTF-16 b (LATIN SMALL LETTER B) repräsentiert als 0x0062. Es gibt auch Ersatzpaare um Werte über 0xFFFF zu codieren. In UTF-8 werden die Unicode Zeichen in einem Strom von Bytes in einem bestimmten Verschlüsselungsschema dargestellt, welches in [1] und [2] beschrieben wird. Anders als UTF-16 ist es damit kompatibel zu ASCII. Höhere Codenummern benötigen zwei oder drei Bytes um verschlüsselt zu werden, selten mehr.

Unicode in KDE Applikationen

Unicode Zeichenketten im Arbeitsspeicher ablegen und auf dem Bildschirm darzustellen ist mit Qt:String und QChar, da diese beiden Klassen, für Ihre Applikation völlig transparent, volle Unicode Unterstützung bieten.

QString und QChar benutzen intern beide UTF-16. Wenn Sie Textabschnitte aus einer 8-bit Quelle lesen oder in eine schreiben (z.B. QTextStream), müssen Sie ein QTextCodec benutzen, um den Text zwischen den beiden Darstellungen zu konvertieren. Normalerweise würden Sie ein UTF-8 Codec benutzen, um eine Unicode Zeichenkette zwischen QByteArray und QString zu konvertieren.

Um das passende Unicode QTextCodec zu erhalten, benutzen Sie einfach:

QTextCodec Utf8Codec = QTextCodec::codecForName("utf-8"); QTextCodec Utf16Codec = QTextCodec::codecForName("utf-16");

Anzeige

Jedes Widget das QString oder QChar zur Textdarstellung benutzt ist in der Lage Unicode Zeichen auszugeben, solange die passende Schriftart installiert ist.

Für eine flexible Textbearbeitung und -darstellung sehen Sie bitte auch in der Qt Dokumentation zu Rich-Text-Verarbeitung nach. Das Scribe System bietet eine Reihe von Klassen rund um die QTextDocument-Klasse an, die es einfach macht, den Unicode benutzenden, formatierten Text richtig darzustellen und zu drucken.

In-Memory Puffer

Um Unicode Daten aus einem In-Memory Puffer, wie QByteArray, zu lesen, kann man die schon oben beschreibenen Codecs benutzen:

QByteArray buffer;

// UTF-16 QString string = Utf16Codec->toUnicode(buffer);

// UTF-8 QString string = Utf8Codec->toUnicode(buffer);

In einen Puffer zu schreiben sieht ähnlich aus:

QString string; // Mein Unicode Text QByteArray array; // Puffer um UTF-16 Unicode zu speichern QTextStream textStream(array, IO_WriteOnly);

textStream.setEncoding(QTextStream::Unicode); textStream << string;

Dateibehandlung

Für das Speichern und Lesen aus und in eine Datei sollten KDE Applikationen eine Option anbieten, den Text statt im lokalen Zeichensatz in Unicode zu bearbeiten. Auf diese Art kann der Benutzer Ihrer Applikation Dokumente im lokalen Zeichensatz als Voreinstellung lesen und schreiben, gleichzeitig aber optional in Unicode. Sowohl UTF-8 als auch UTF-16 sollten unterstützt werden. Europäische Benutzer werden eher UTF-8 vorziehen, während Asiatische UTF-16 bevorzugen.

Unicode Daten aus einer Textdatei zu lesen wird im folgenden Beispiel demonstriert. Dabei werden die QTextCodecs benutzt, die bereits oben für UTF-8 Daten erwähnt wurden:

QTextStream textStream; QString line;

// UTF-16, wenn die Datein mit einer Unicode Marke anfängt // ist die Voreinstellung ok, sonst: // textStream.setEncoding(QTextStream::Unicode); line = textStream.readLine();

// UTF-8 textStream.setCodec(Utf8Codec); line = textStream.readLine();

Schreiben ist ähnlich einfach, ebenfalls kommen die QTextCodecs von oben zum Einsatz:

QTextStream textStream; QString line;

// UTF-16 textStream.setEncoding(QTextStream::Unicode); textStream << line;

// UTF-8 textStream.setCodec(Utf8Codec); textStream << line;

Unicode Zeicheneingabe

In der Lage zu sein, Unicode zu laden, speichern und darstellen ist nur ein Teil des Puzzles. Ein entscheidendes Stück ist es noch, dem Benutzer die Eingabe von Unicode-Zeichen zu erlauben. Das wird im allgemeinen durch das Benutzen von Plattform-spezifischen multibyte Eingabemethoden (IM) benutzt, wie XIM auf X11. KDE bietet eine gute Unterstützung für diese Eingabemethoden über Qt und Ihre Applikation sollte nichts weiteres benötigen, um solche Eingaben zu ermöglichen.

Einfache Unicode Dateien und Schrifttypen

Ein einfacher Weg um Unicode Beispieldaten zu bekommen ist es, das kde-i18n Paket zu nehmen und dort einige Dateien nach Unicode zu konvertieren, indem man das recode Kommandozeilen Werkzeug benutzt.

recode KOI8-R..UTF-8 ru/messages/kdelibs.po recode ISO-8859-1..UTF-16 de/messages/kdelibs.po recode ISO-8859-3..UTF-8 eo/messages/kdelibs.po

Die Mehrheit der Betriebssysteme heute haben eine Unicode TrueType Schriftart bereits dabei, siehe auch [3].