[linux-l] Zeichensatz in Textdateien

olafBuddenhagen at gmx.net olafBuddenhagen at gmx.net
Mo Aug 20 07:23:17 CEST 2007


Hallo,

On Sun, Aug 19, 2007 at 12:48:41PM +0200, Steffen Dettmer wrote:
> > On Sat, 18 Aug 2007 12:39:16 +0200 Steffen Dettmer wrote:

> > Nur, dass kein Schwein latin-9 benutzt.  Da ist man mit der M$
> > Erweiterung von latin-1 schon erfolgreicher.
> 
> Benutzt keiner? Dachte, ist Standard in DE?

Nein. Früher war l1 Standard. Mittler Weile wurde es größtenteils durch
utf8 abgelöst. l9 hat sich nie auf breiter Basis durchgesetzt. Wäre auch
Quatsch von l1 zu l9 zu wechseln, wenn man gleich zu utf8 gehen kann...

> > UTF-8 ist aber bloat (in Hinsicht auf Speicherbedarf) für die
> > meisten nicht Latin-1 kodierbaren Zeichen (z.B. die CJK Zeichen
> > brauchen, glaube ich, drei Byte statt den "üblichen" zwei Byte).
> 
> Ja, und weil so ein Zeichen kommen könnte, muss man jedes angucken,
> ob's MSB gesetzt ist (oder wie das war)...

Muss man eher selten. Bei den meisten String-Operationen spielt es gar
keine Rolle; man kann utf8 dann genauso behandeln wie klassische
ein-Byte Zeichensätze.

Und selbst wenn, ist die Sonderbehandlung nicht wirklich sehr teuer. Ich
kann mir ehrlich gesagt kein Programm vorstellen, bei dem die
Stringbehandlung nicht ziemlich vernachlässigbar ist.

Hauptnachteil von utf8 ist, dass man sich an vielen Stellen mehr
Gedanken machen muss, um Fehler oder größere Ineffizienzen zu vermeiden.

> > > Mit UTF ist doch selbst ein strlen plötzlich eine "teure"
> > > Funktion, oder?
> > 
> > Bei einem C string nicht viel teurer, in etwa ein `&' pro Zeichen.  
> 
> Ist doch dann auf intel keine block CPU operation mehr, sondern eine
> "echte Schleife", oder? Stell ich mir deutlich langsamer vor (50%?).

CISC-Operationen wie die Stringbefehle sind bei x86 schon seit langem
nicht mehr effizienter; eher im Gegenteil. Einziger Vorteil ist, dass
sie ein paar Befehlsbytes sparen. Bei utf8 hat man dann halt 'nen
Funktionsaufruf statt eines inline-Stringbefehls. Man muss schon sehr
viele Stringoperationen benutzen, damit sich der Unterschied bemerkbar
macht...

Bloat hat man hier eh nur, wenn man mit kaputten Anwendungen vergleicht,
die *ausschließlich* mit ein-Byte Zeichensätzen klarkommen. Wenn man
Mehrsprachigkeit implementiert, ist utf8 eindeutig der *effizienteste*
Weg, da man hier mit einem Zeichensatz alle Sprachen abdeckt, und sich
so umständliche Sonderbehandlungen sparen kann.

> Also latin9, oder? :-) Warum nehmen die Anwendungen es dann nicht so
> gern?

Anwendungen ist es herzlich egal ob l1 oder l9 oder noch was anderes;
alle ein-Byte Zeichensätze sind implementierungsseitig absolut
identisch. l9 macht nur aus Benutzersicht wenig Sinn, siehe Oben...

-Olaf-



Mehr Informationen über die Mailingliste linux-l