Re: Dateisysteme, Unicode, UTF-8 und Konvertierungsprobleme

2003-03-14 Diskussionsfäden Eduard Bloch
Moin Martin!
Martin v. Löwis schrieb am Friday, den 14. March 2003:

 , kein
 Dateisystem unterstützt Unicode, es gibt nicht mal eine interne
 Zeichensatzdeklaration, die den Zeichensatz angibt. 
 
 Falsch. Man kann gut UTF-8 in Dateinamen verwenden. In NFSv4 ist
 sogar festgelegt, dass Dateinamen in UTF-8 kodiert sind.

Doch. Mit Unterstützen meine ich richtige auf- und abwährtskompatible
Lösung. Das ist so nicht gegeben, der verwendete Zeichensatz wird
nirgendwo deklariert. Dass NFSv4 UTF-8 eindeutig vorschreibt ist dagegen
eine gute Tatsache.

 Alphabete mit
 nicht-lateinischen Zeichen wurden nach bestimmten Tabellen
 (NLS-Zeichensätzen) in dem erweiterten (8-bit) ASCII verteilt. 
 
 Falsch. Man kann sehr gut Multi-Byte-Zeichensätze in Dateisystemen 
 benutzen; davon wird auch intensive gebrauch gemacht.

Jain, sehr gut würde ich nicht dazu sagen, die Multi-Byte-Zeichensätze
verursachen im Prinzip die gleichen Probleme wie Unicode.

 Während
 Probleme mit Zeichensätzen den Windows-Usern spaetestens seit Win2k
 fremd sind, müssen sich Linux-Benutzer noch lange Zeit damit plagen. 
 
 Ich bin nicht sicher. Redhat 8 geht in die richtige Richtigung:
 Alle locales verwenden UTF-8, und das Problem ist gelöst.

Nur bedingt: was ist mit der Umwandlung der vorhandenen Dateinamen? Und
was ist mit Anwendungen, die nicht UTF-8-vorbereitet sind? Andererseits,
man kann den alten Kram aus der Distribution rausoperieren und das
Problem ist gelöst.

 Man
 ist in der Regel auf ein Zeichensatz beschränkt und muss die gesammte
 Umgebung auf eine andere Locale umstellen (und ausserdem überall
 händisch Fonts ändern, sofern das nicht durch Toolkits wie Gt
 vereinheitlich ist), wenn man mit anderen Welten Kontakt aufnehmen will.
 
 Falsch. Das hängt von der anderen Welt ab: In der Regel ist die Windows,
 und man kann für Dateisystemnamen die Mount-Optionen verwenden.

Doch. Um die Umstellung der Umgebung kommt man nicht herum. Wenn es
lediglich um die Dateinamen geht - die werden halt falsch angezeigt,
aber i.d.R. trotzdem angenommen.

 Es gibt nähmlich keinen Mechanismus für Abwährtskompatiblität (wie in
 Windows-XP), mit dem das System die Soll-Sprache einer Anwendung erkennt
 und aus dem System-Internen Unicode automatisch mit der Soll-Sprache der
 Anwendung kommuniziert.
 
 Falsch. Es gibt verschiedene solcher Mechanismen, etwa das X-Clipboard.

Stimmt, das ist das wenigste.

  - Bei nicht-lateinischen Zeichensätzen benötigen die Zeichen mehr
Platz, somit schrumpft die maximale Stringlänge beim gleichbleibenden
reelen Speicherplatz (z.B. in Dateinamen). Womit wir früher oder
später auf ein anderes Problem zusteuern, Beschränkungen, die man
z.B. von Joliet kennt (64Zeichen)
 
 Falsch: Das hängt von den nicht-lateinischen Zeichen ab. Kyrillisch,
 Armenisch, Hebräisch usw. brauchen in UTF-8 geringfügig weniger Platz 
 als UCS-2 (wenn im Text Leerzeichen vorkommen).

Falsch. Z.B. kyrillische Zeichen verwenden andere Codes, auch wenn sie beinahe
identisch aussehen. Sieh selbst nach.

Gruss/Regards,
Eduard.
-- 
Wenn der Bauer das Schwein verhaut, hat es Scheiße wohl gebaut.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Dateisysteme, Unicode, UTF-8 und Konvertierungsprobleme

2003-03-14 Diskussionsfäden Martin v. Löwis
Eduard Bloch wrote:
Ich bin nicht sicher. Redhat 8 geht in die richtige Richtigung:
Alle locales verwenden UTF-8, und das Problem ist gelöst.


Nur bedingt: was ist mit der Umwandlung der vorhandenen Dateinamen? 
Die muss man konvertieren (durch Umbenennung). Gewisse Probleme mit 
mojibake wird man nicht vermeiden können - allerdings sind andere 
Systeme da auch nicht besser; unter Windows sind beispielsweise nach wie 
vor *zwei* Zeichensätze in Verwendung: der Zeichensatz im 
Terminalfenster (OEMCP) ist ein anderer als der im Window-Teil (ACP).

Und
was ist mit Anwendungen, die nicht UTF-8-vorbereitet sind? 
An welche denkst Du da genau? Alle meine Anwendungen, die irgendwie
mit Dateinamen zu tun haben, kommen gut mit beliebigen Kodierungen
derselben klar: Entweder ist es ihnen egal, weil sie die sowieso
nur weiterreichen (etwa /bin/ls), oder aber entsprechend der locale
darstellen (Gnome, etc).
Ein gewisses mojibake muss man vermutlich wiederum akzeptieren, bis
die restlichen Bugs gefixt sind: Auch unter Windows haben viele
Programme Schwierigkeiten mit Dateinamen, die in ACP nicht 
repräsentierbar sind; diese Programme erhalten dann Fragezeichen
anstelle der eigentlichen Zeichen.

- Bei nicht-lateinischen Zeichensätzen benötigen die Zeichen mehr
 Platz, somit schrumpft die maximale Stringlänge beim gleichbleibenden
 reelen Speicherplatz (z.B. in Dateinamen). Womit wir früher oder
 später auf ein anderes Problem zusteuern, Beschränkungen, die man
 z.B. von Joliet kennt (64Zeichen)
Falsch: Das hängt von den nicht-lateinischen Zeichen ab. Kyrillisch,
Armenisch, Hebräisch usw. brauchen in UTF-8 geringfügig weniger Platz 
als UCS-2 (wenn im Text Leerzeichen vorkommen).


Falsch. Z.B. kyrillische Zeichen verwenden andere Codes, auch wenn sie beinahe
identisch aussehen. Sieh selbst nach.
Hab ich doch gemacht: Nehmen wir als Beispiel CYRILLIC CAPITAL LETTER 
ZHE, U+0416. In UCS-2 ist das \x04\x16, in UTF-8 ist es \xd0\x96.
In beiden Fällen zwei Byte. An welches Zeichen dachtest Du?

Ciao,
Martin
--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)


Dateisysteme, Unicode, UTF-8 und Konvertierungsprobleme

2003-03-13 Diskussionsfäden Eduard Bloch
#include hallo.h
* Stephan Seitz [Thu, Mar 13 2003, 05:55:44PM]:

  Folgendes: Du bringst 2 Sachen zusammen die nicht zusammen gehören.
  Einmal gibts da die Kodierung der Dateinamen im Dateisystem - bei Redhat
  8 wird offensichtlich die Standard NLS auf UTF-8 gesetzt und damit
  werden dann alle Dateinamen in UTF-8 kodiert. Das andere ist die Anzeige
  von UTF-8 kodierten Dingen. Das eine hat mit dem anderen nahezu nichts

IMO ja. Dann werden die Dateinamen direkt in UTF-8 geschrieben.

 Sagt mal, ist es bei Dateisystemen wie ext2/3 oder reiser nicht so,
 daß die Kodierung von der locale abhängig ist? Also ich habe hier ein
 Verzeichnis angelegt unter einer UTF-8-Umgebung (locale: de_DE.UTF-8)
 und die Namen sind falsch in [EMAIL PROTECTED] (also iso-8859-15) und
 natürlich umgekehrt. Ich dachte immer, diese NLS-Module bräuchte man
 nur für Samba, CD-ROM oder FAT, zumindest lädt der Kernel diese Module
 nur in diesem Zusammenhang.

Folgendes behaupte ich ohne Anspruch auf Richtigkeit:

Dateisysteme unter Linux und ihre Kodierungen sind eine komplizierte
Angelegenheit. Allgemein ist Internationalisierung nur mit langfristiger
und grundlegender Plannung elegant realisierbar. Microsoft erkannte dies
schon vor zehn Jahren und ihre neuere Dateisysteme verwenden allesamt
Unicode (VFAT, VFAT32, Joliet, NTFS, interne Kodierung ist AFAIK UCS-2
mit BOM, d.h. immer zwei-bytig mit einer Endianes-Markierung am
Stringanfang) [1]. Unter Linux dagegen hat man lange Zeit geschlafen:
grundsätzlich wurde alles auf der Annahme: Zeichen=Byte aufgebaut, kein
Dateisystem unterstützt Unicode, es gibt nicht mal eine interne
Zeichensatzdeklaration, die den Zeichensatz angibt. Alphabete mit
nicht-lateinischen Zeichen wurden nach bestimmten Tabellen
(NLS-Zeichensätzen) in dem erweiterten (8-bit) ASCII verteilt. Während
Probleme mit Zeichensätzen den Windows-Usern spaetestens seit Win2k
fremd sind, müssen sich Linux-Benutzer noch lange Zeit damit plagen. Man
ist in der Regel auf ein Zeichensatz beschränkt und muss die gesammte
Umgebung auf eine andere Locale umstellen (und ausserdem überall
händisch Fonts ändern, sofern das nicht durch Toolkits wie Gtk
vereinheitlich ist), wenn man mit anderen Welten Kontakt aufnehmen will.
Es gibt nähmlich keinen Mechanismus für Abwährtskompatiblität (wie in
Windows-XP), mit dem das System die Soll-Sprache einer Anwendung erkennt
und aus dem System-Internen Unicode automatisch mit der Soll-Sprache der
Anwendung kommuniziert.
Immerhin kann man bei deutschen Texten auch mit 7-bit ASCII auskommen,
das Umschreiben von wenigen Umlauten ist erträglich. Bei anderen, z.B.
kyrillischen Zeichensätzen, sieht es dagegen düster aus.

Als Lösung aus der Misere wurde UTF-8 auserkoren. Dies ist eine echte
Unicode-Variante: Mischung aus dem herkömmlichen ASCII und
Unicode-Zeichen, die in die Byte-Zeichen eingebettet werden. Der Vorteil
von UTF-8 ist die vollständige Kompatibilität zu ASCII (7-bit, keine
Probleme mit englischer Sprache) und somit die platzsparende
Datenlagerung im Vergleich zu UCS-2 oder UCS-4 bei wissenschaftlichen
Daten u.Ae. Aber nichts geht ohne Nachteile: 
 - Bei nicht-lateinischen Zeichensätzen benötigen die Zeichen mehr
   Platz, somit schrumpft die maximale Stringlänge beim gleichbleibenden
   reelen Speicherplatz (z.B. in Dateinamen). Womit wir früher oder
   später auf ein anderes Problem zusteuern, Beschränkungen, die man
   z.B. von Joliet kennt (64Zeichen)
 - Es ist nicht kompatibel zu vorhanden 8bit-Zeichensaetzen; somit sind
   alle Sprachen wieder gleichberechtigt und betroffene Benutzer
   gleichermassen von Umstellungsproblemen betroffen. Diese sind
   gewaltig, zu viele Programme sind einfach kurzsichtig entstanden und
   müssen geändert werden. Siehe Unicode-on-Linux-Howto für Details.
 - Daraus resultiert auch das nächste Problem: UTF-8 soll die nativen
   Zeichensätze irgendwann mal ersetzen. Unter ungünstigen Umständen,
   und diese sind immer zu erwarten, wenn man den Übergang nicht
   sorgfältig plannt, ensteht ein Gemisch aus UTF-8 und Zeichen in der
   alten NLS-Kodierung (z.B. latin1). Mir fällt nur eine vernünftige
   Lösung, um mit diesem Schlamassel aufzuräumen:
- für Korrektur vorher: Perl-Skript, das das Dateisystem durchgeht
  und die Dateinamen NLS-UTF-8 ändern
- für Korrektur nach der Panne: Perl-Skript, das das Dateisystem
  durchgeht und nur typische Spezialzeichen (hier: Umlaute) erkennt
  und ins UTF-8 umwandelt.

[1] Es ist also möglich, beliebige Zeichen auf von MS-stammenden
Dateisystemen zu speichern. Mit der Mount-Option
iocharset=8-bit-zeichensatz wandelt der Kernel die Zeichen zwischen
einer best. NLS-Kodierung für die Anwendungen und den gespeicherten
Unicode-Dateinamen im Dateisytem. 
Mit der Option utf-8 kodiert der Kernel das Dateisystem-interne
Unicode-Format ins UTF-8-Unicode, das für die Anwendungen sichtbar wird.
Dies erfordet natürlich Programe, die damit auch umgehen können,
siehe oben.
Mir ist leider keine Option bekannt, 

Re: Dateisysteme, Unicode, UTF-8 und Konvertierungsprobleme

2003-03-13 Diskussionsfäden Martin v. Löwis
Eduard Bloch wrote:
Folgendes behaupte ich ohne Anspruch auf Richtigkeit:
Ist ziemlich richtig. Ich versuche mal, die Fehler zu finden:

Dateisysteme unter Linux und ihre Kodierungen sind eine komplizierte
Angelegenheit. Allgemein ist Internationalisierung nur mit langfristiger
und grundlegender Plannung elegant realisierbar. 
(Planung)

Microsoft erkannte dies
schon vor zehn Jahren und ihre neuere Dateisysteme verwenden allesamt
Unicode (VFAT, VFAT32, Joliet, NTFS, interne Kodierung ist AFAIK UCS-2
mit BOM, d.h. immer zwei-bytig mit einer Endianes-Markierung am
Stringanfang) [1]. 
Ist ohne BOM, und ist zunehmend auch UTF-16.

Unter Linux dagegen hat man lange Zeit geschlafen:
grundsätzlich wurde alles auf der Annahme: Zeichen=Byte aufgebaut
Ich bin hier nicht so sicher. Es ist eher die Annahme:
Dateinamen=Bytefolgen; Zeichen sind uninteressant und Aufgabe der Anwendung.
, kein
Dateisystem unterstützt Unicode, es gibt nicht mal eine interne
Zeichensatzdeklaration, die den Zeichensatz angibt. 
Falsch. Man kann gut UTF-8 in Dateinamen verwenden. In NFSv4 ist
sogar festgelegt, dass Dateinamen in UTF-8 kodiert sind.
Alphabete mit
nicht-lateinischen Zeichen wurden nach bestimmten Tabellen
(NLS-Zeichensätzen) in dem erweiterten (8-bit) ASCII verteilt. 
Falsch. Man kann sehr gut Multi-Byte-Zeichensätze in Dateisystemen 
benutzen; davon wird auch intensive gebrauch gemacht.

Während
Probleme mit Zeichensätzen den Windows-Usern spaetestens seit Win2k
fremd sind, müssen sich Linux-Benutzer noch lange Zeit damit plagen. 
Ich bin nicht sicher. Redhat 8 geht in die richtige Richtigung:
Alle locales verwenden UTF-8, und das Problem ist gelöst.
Man
ist in der Regel auf ein Zeichensatz beschränkt und muss die gesammte
Umgebung auf eine andere Locale umstellen (und ausserdem überall
händisch Fonts ändern, sofern das nicht durch Toolkits wie Gt
vereinheitlich ist), wenn man mit anderen Welten Kontakt aufnehmen will.
Falsch. Das hängt von der anderen Welt ab: In der Regel ist die Windows,
und man kann für Dateisystemnamen die Mount-Optionen verwenden.
Es gibt nähmlich keinen Mechanismus für Abwährtskompatiblität (wie in
Windows-XP), mit dem das System die Soll-Sprache einer Anwendung erkennt
und aus dem System-Internen Unicode automatisch mit der Soll-Sprache der
Anwendung kommuniziert.
Falsch. Es gibt verschiedene solcher Mechanismen, etwa das X-Clipboard.

[UTF-8]
 - Bei nicht-lateinischen Zeichensätzen benötigen die Zeichen mehr
   Platz, somit schrumpft die maximale Stringlänge beim gleichbleibenden
   reelen Speicherplatz (z.B. in Dateinamen). Womit wir früher oder
   später auf ein anderes Problem zusteuern, Beschränkungen, die man
   z.B. von Joliet kennt (64Zeichen)
Falsch: Das hängt von den nicht-lateinischen Zeichen ab. Kyrillisch,
Armenisch, Hebräisch usw. brauchen in UTF-8 geringfügig weniger Platz 
als UCS-2 (wenn im Text Leerzeichen vorkommen).

 - Es ist nicht kompatibel zu vorhanden 8bit-Zeichensaetzen; somit sind
   alle Sprachen wieder gleichberechtigt und betroffene Benutzer
   gleichermassen von Umstellungsproblemen betroffen. Diese sind
   gewaltig, zu viele Programme sind einfach kurzsichtig entstanden und
   müssen geändert werden. Siehe Unicode-on-Linux-Howto für Details.
Richtig. Das gilt natürlich auch für UCS-2.

- für Korrektur vorher: Perl-Skript, das das Dateisystem durchgeht
  und die Dateinamen NLS-UTF-8 ändern
Richtig; Python tut's auch.

Ciao,
Martin
--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)