ubuntuusers.de

Unicode und Linux...

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

tobb

Anmeldungsdatum:
14. April 2006

Beiträge: 382

Hi,

unterstützt Ubuntu (und auch Debian und andere Linux Distributionen) Unicode vollständig?
Lohnt es sich Programme für Linux in Unicode zu designen?

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Ja.

Mitlerweile wird in jeder Modernen GNU/Linux Distribution defaultmäßig UTF-8 als Zeichenkodierung genutzt. Und UTF-8 ist wie du hoffentlich weißt ein Kodierung um den Unicode Zeichensatz darzustellen.

Ob ein Zeichen angezeigt wird oder nicht (ich meine hier vorallem Asiatische Zeichen etc.) hängt dann davon ab ob es auch Schriftarten gibt mit solchen Zeichen.

Debian nutzt seit Etch (aktuelle Stable) ebenfalls UTF-8 als Zeichenkodierung, Sarge hat noch ISO-8859-1 default genutzt. Ubuntu glaube ich seit 6.10 oder so? Weiß es aber nicht genau.

Eine aktuelle Fedora Core, Suse oder Red Hat Version sollten ebenfalls bereits UTF-8 nutzen. Allerdiengs weiß ich es nicht genau.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

@sid: 6.06 nutzt UTF-8, und wenn ich mich recht erinnere auch 5.10 schon.

Lohnt es sich Programme für Linux in Unicode zu designen?

Eh - :irritiert: - Unicode ist die Codierung der Wahl - alles andere würde ich nur im Notfall in Erwägung ziehen.
Die Tage von ISO-8859-15 sind gezählt.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

@user unknown
Unicode ist keine Codierung sondern nur ein Zeichensatz bzw. Zeichenvorrat. Unicode schreibt nicht vor wie ein Zeichen letztendlich in Bytes geschrieben wird.

UTF-8 ist eine Codierung die ein bestimmtes Unicode Zeichen mit einem Codepoint in eine bestimmte Bytesequenz umsetzt. Es gibt aber auch mehr. UTF-16, UTF-32, UCS-2, UCS-4 und wie sie sonst noch alle heißen. Die Codierung untereinander muss nicht identisch sein, und wird es auch nicht.

Ansonsten um aber user unknown aussage zu bekräftigen. Sollte man definitiv Unicode nehmen wenn man die Wahl hat. Dein Programm kann auch Unicode intern nutzen und die Zeichen ISO-8859-1 Codiert ausgeben. (Dies ist z.B. bei Perl der default Fall.)

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Sid Burn hat geschrieben:

@user unknown
Unicode ist keine Codierung sondern nur ein Zeichensatz bzw. Zeichenvorrat. Unicode schreibt nicht vor wie ein Zeichen letztendlich in Bytes geschrieben wird.

UTF-8 ist eine Codierung die ein bestimmtes Unicode Zeichen mit einem Codepoint in eine bestimmte Bytesequenz umsetzt.

Aha. ☺
Gut - UTF-16 ist ja auch Unicode - bzw. auch nicht Unicode, sondern eine Kodierung für Unicode - so richtig ausgedrückt?

LCID_Fire

Anmeldungsdatum:
1. Oktober 2005

Beiträge: 75

Soweit bin ich auch, nur mich verwirrt grad was. Guck ich in die Doku zu vielen Projekten, z.B. SQLite (http://www.sqlite.org/capi3ref.html#sqlite3_exec), dann steht da, dass ein char in UTF-8 codiert sei. Aber AFAIK ist ein char als byte definiert, was nur popelige 256 Zeichen sind. Wie soll man da die UTF-8 Kodierung hineinzwängen? Müssten die Interfaces nicht mit wchar_t definiert sein? Oder bedeutet es, dass man zwar theoretisch Unicode anzeigen könnte, aber *ätschibätsch* durch die Einschränkung auf 256 Zeichen halt doch wieder nur bei ASCII rauskommt? 😲

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Wie es letztendlich gespeichert wird spielt keine Rolle.

Auch bei UTF-8 werden die Zeichen immer noch in Bytes gespeichert genauso wie in ISO-8859-1 oder in jeder anderen Codierung. Es kommt rein auf die Interpretation drauf an. Ob nun ein Zeichen in einem Speicherbereich gespeichert wird der variable 1-4Byte groß ist, oder generell auf mehrere char Zeichen aufgeteilt wird spielt halt keine rolle.

Du kannst auch utf8 daten ohne probleme in einer iso-8859-1 datenbank speichern, auslesen, und anzeigen, ohne verlust. Zwar sieht die Datenabnk anstatt ein 4 Byte Asiatisches Zeichen dann von mir aus 4 "kryptische" Zeichen, sofern aber die Byte Codierung nicht geändert wird spielt das keine Rolle.

Jedenfalls für das Anzeigemedium was diese bytes gelifert bekommt und dann auch als UTF-8 Daten interpretiert.

Jan-Nik

Avatar von Jan-Nik

Anmeldungsdatum:
22. Juli 2006

Beiträge: 427

Wohnort: Sulingen

LCID Fire hat geschrieben:

Soweit bin ich auch, nur mich verwirrt grad was. Guck ich in die Doku zu vielen Projekten, z.B. SQLite (http://www.sqlite.org/capi3ref.html#sqlite3_exec), dann steht da, dass ein char in UTF-8 codiert sei. Aber AFAIK ist ein char als byte definiert, was nur popelige 256 Zeichen sind. Wie soll man da die UTF-8 Kodierung hineinzwängen? Müssten die Interfaces nicht mit wchar_t definiert sein? Oder bedeutet es, dass man zwar theoretisch Unicode anzeigen könnte, aber *ätschibätsch* durch die Einschränkung auf 256 Zeichen halt doch wieder nur bei ASCII rauskommt? 😲

Ein Zeichen ist dann nicht mehr ein byte (sondern bei UTF-8 nur bei den ASCI-Zeichen). Damit wird es auch schwer die Länge des Textes einfach heraus zu finden. wchar_t wäre glaub ich UTF-16.

LCID_Fire

Anmeldungsdatum:
1. Oktober 2005

Beiträge: 75

Sid Burn hat geschrieben:

Auch bei UTF-8 werden die Zeichen immer noch in Bytes gespeichert genauso wie in ISO-8859-1 oder in jeder anderen Codierung. Es kommt rein auf die Interpretation drauf an. Ob nun ein Zeichen in einem Speicherbereich gespeichert wird der variable 1-4Byte groß ist, oder generell auf mehrere char Zeichen aufgeteilt wird spielt halt keine rolle.

Einen Unterschied macht es schon, weil man ja normalerweise die Relation typ = information hat. Aber wenn man mehrere hernimmt dann hat man n * typ = information. Somit muss eine Funktion wie strlen ja dann auch wissen, wie viele chars in der aktuellen Kodierung verwendet werden - sonst wird ja die Länge falsch.

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Die Relation Typ - Information hat man noch immer, man muß nur den richtigen Typ (wchar) und die Richtige Funktion für die Resolution nehmen wcslen(const wchar_t *s) 😉. Letztendlich ist char doch nur eine relativ willkürliche Festlegung, die inzwischen ziemlich outdated ist.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

LCID Fire hat geschrieben:

Sid Burn hat geschrieben:

Auch bei UTF-8 werden die Zeichen immer noch in Bytes gespeichert genauso wie in ISO-8859-1 oder in jeder anderen Codierung. Es kommt rein auf die Interpretation drauf an. Ob nun ein Zeichen in einem Speicherbereich gespeichert wird der variable 1-4Byte groß ist, oder generell auf mehrere char Zeichen aufgeteilt wird spielt halt keine rolle.

Einen Unterschied macht es schon, ...

Deswegen steht auch noch ein weiterer Satz in meinen Post den du nicht mit gequotet hast....

Jedenfalls für das Anzeigemedium was diese bytes gelifert bekommt und dann auch als UTF-8 Daten interpretiert.

Antworten |