Zeichenumwandlung [LANG!]
Thomas Berger
ThB at gymel.com
Mo Nov 19 17:42:48 CET 2001
Lieber Herr Allers, liebe Liste,
Als Nachtrag zur Diskussion von voriger Woche habe ich
einige Experimente unternommen. Meine Behauptung war
ja, dass "ich niemanden kenne, der weiss, wie man einen
beliebigen (etwa Allegro-Zeichensatz) sauber unter Windows
einbinden kann". Ich kann diese Behauptung inzwischen
nur bekraeftigen (es mag sein, dass es jemanden gibt,
der es kann, ich habe aber trotz extensiver Recherchen
niemanden gefunden, der das auch nur behaupten wuerde
und ich habe viele Indizien gefunden, dass es nicht
geht). Aber der Reihe nach:
[Alles folgende fuer Windows NT, Service Pack 6a,
Internet Explorer 5.0, Pan-European Support installiert,
Tastaturschema fuer Deutsch und Griechisch]
Ich habe mich nicht darum gekuemmert, mein System
komplett zu "allegro(in)fizieren", d.h. mein Ziel
war es nicht, OSTWEST zur Standard-Codepage zu machen
oder alle Windows-Zeichensaetze auf Allegro umzubiegen:
- Es ist mir gelungen, eine Codepage (444) fuer den
OSTWEST-Zeichensatz zu erzeugen, die (nach eingabe
von "chcp 444" in DOS-Boxen mit Cmd.exe die entsprechenden
Zeichen des OSTWEST-Zeichensatzes zeigt (sofern man eine
multilinguale Schrift, wie etwa Lucida Console, eingestellt
hat, sonst sieht man nur die (passenden!) Grundbuchstaben.
Im Vollbildmodus tut sich mangels einer entsprechenden
Unterstuetzung in fixedsys.fon natuerlich nichts.
Nachteil: startet man den x-editor, so sieht man doch
nur die dos-Zeichen (hat der wirklich eine eigene
Zeichentabelle?), startet man allegro, kann man auch
normale Buchstaben nur mit Alt-nn eingeben (unter
cmd am Prompt gilt keine dieser Einschraenkungen).
- Es ist mir gelungen, eine Codepage (1234) fuer den
Windows-Zeichensatz zu erzeugen. Eine Testdatei
liess sich mithilfe dieser Codepage in UnicEdit
(eine Art Unicode-Notepad mit Konvertierungsfunktionen
anhand vorhandener Systemressourcen) oeffnen und
wurde korrekt angezeigt.
- Mein Hauptinteresse galt natuerlich den TTF-Fonts.
Es gibt wohl zwei Wege, jeweils mit Vor- und Nachteilen:
1. Die Windows 3.1-Methode: Es wird ein Font gebaut, bestehend
aus 256 Zeichen (genauer: 232), dieser Font ist von
seinen Eigenschaften her ein Symbol-Font, die Zeichen
werden dem privaten Unicodebereich U+F000 - U+F07F zugeordnet.
Mein Font a-cour-s.ttf (Allegro Courier) ist nach dieser
Methode erzeugt, ich habe der Reihe nach einfach die
gewuenschten Zeichen aus cour.ttf (Courier New) in der
Reihenfolge fuer allegro.ttf dort hineinkopiert. Diese
Methode ist in dem Sinne "sauber", dass sie nichts falsches
behauptet und in dem Sinne unbefriedigend, dass zu allen
benutzten Zeichen natuerlich die Unicode-Mappings (d.h.
die "Bedeutungen" bekannt sind, aber nicht beruecksichtigt
werden koennen). Dieser Font ist sehr blaesslich, der
Standard-Font cour.ttf besitzt wohl entweder Hinting-Tabellen
oder fuer niedrige Aufloesungen auch noch Bitmaps, die beim
Kopieren der Zeichen verlorengegangen sind: Als Effekt wird
in kleineren und mittleren Aufloesungen eine optische
Glaettung der Zeichen mittels Graustufen vorgenommen.
2. Die TU-BS-Methode: Man nehme sich einen vorhandenen Font
und sortiere die Zeichen so um, dass es passt. Mein Font
a-cour-t.ttf (Courier Allegro) ist so erzeugt: Man muss
hierzu wissen, welche Unicode-Zeichen unter CP1252 den
einzelnen Positionen von 32 bis 255 zugeordnet werden und
weist dann den Glyphen, die man auf der entsprechenden Position
sehen will, den entsprechenden Unicode zu (es ist also etwas
indirekter als bei Methode 1). Diese Methode operiert also
mit "Luegen", denn das grosse Z mit Hacek (Unicode 017D) etwa
liegt in CP1252 auf Position 142 und in den allegro.ttf
auf Position 219, wo in CP1252 das "ganz normale" ISO-Zeichen
U mit Circonflex liegt. Damit der Font funktioniert, muss
man nun einerseits behaupten, dass es ein Z mit Hacek nicht
gibt, und von dem Zeichen, das so aussieht, muss man behaupten,
dass es ein U mit Circonflex ist. Bei Cut und Paste sind
natuerlich diese Behauptungen und nicht das Aussehen massgeblich.
Der Effekt dieser Verbiegungen ist natuerlich nicht schlimmer
als mit dem Symbol-Zeichensatz: Auch hier wird vom System
stillschweigend CP1252 (hier jedoch, weil Grundeinstellung
des Testsystems?) unterstellt, Kommunikation mit anderen
Anwendungen ist nicht moeglich.
Uebrigens muss man durchaus doppelt luegen: Microsoft hat die
Codepage 1252 im Laufe der Jahre des oefteren erweitert, etwa
um das Euro-Zeichen. Man muss dem entsprechenden Glyphen (der
sowohl in Ostwest als in CP1252 auf Position 128 kommt) daher
einerseits (fuer alte Windows-Systeme) sagen, dass er U+0080
ist, andererseits (fuer neue Systeme) sagen, dass er U+20AC
ist (was er auch wirklich ist, weil allegro.ttf da nicht
abweicht).
3. Meine behauptete Methode, dass es eventuell "sauber" ginge,
funktioniert nicht. Meine Ueberlegung war, dass man mit
einer geeigneten Codepage (daher die oben erwaehnte Codepage
1234) und Unicode-Zuordnungen des Allegro-Fonts (schon laengst
vorhanden) einfach dafuer sorgen kann, dass einer der
Systemfonts, die alle viele hundert Zeichen (WGL4: Westlich,
Oestlich, Grieschisch und kyrillisch) enthalten, in neueren
Versionen auch noch Hebraeisch und Arabisch nicht im Ausschnitt
CP1252 sondern im neu erfundenen Ausschnitt CP1234 angezeigt
wird. Meine Recherchen haben jedoch ergeben, dass hierfuer
nicht die Codepage massgeblich ist, sondern ein undokumentiertes
Feature von Microsoft (LanguageID?), das festverdrahtete,
urspruenglich mnemnoische) Zuordnungen enthaelt. Bekannt sind
die Zuordnungen
00 <=> CP 1252
(161) <=> CP 1253 (griechisch)
BA (186) <=> CP 1257 (BAltisch)
CE (204) <=> CP 1251 (Cyrillic Europe)
EE (238) <=> CP 1250 (Eastern Europe)
(162) <=> CP 1254 (Tuerkisch)
(177) <=> CP 1255 (Hebraeisch)
und noch einige wenige andere (Koreanisch, Arabisch, Chinesisch)
D.h. man kann sich einen Font nicht beliebig (mittels Codepage)
aus dem Unicode-Repertoire zusammenstellen, sondern ist an
die oben angegebene Liste von vorgegebenen Codepages gebunden.
(Unter WordPad bekommt man ja auch die Systemschriften in den
Geschmacksrichtungen "Griechisch, Baltisch, Kyrillisch,
Mitteleuropaeisch, und Tuerkisch" angeboten: Dies entspricht
also nicht den im System verfuegbaren Codepages, sondern
den Codepages, denen von Microsoft eine Funktion fuer die
Sprachauswahl zugeordnet ist)
Im kyrillischen Raum gibt es etwa gleich verbreitet 4 verschiedene
kyrillische Codepages: neben CP 1251 noch das DOS-Pendant von
Microsoft sowie die KOI-8R-Codierung, die sich im Osten lokal
entwickelt hat, diese unter zwei verschiedenen Codepage-Nummern
und m.W. noch als Windows-Pendant (oder ISO-Kyrillisch mit leichten
Abweichungen von CP 1251 ist verbreitet). In diese Bereich
gibt es diverse vorgehensweisen, ein Windows-System zu
"russifizieren": Sei es, dass man mit KOI-8R weiter arbeiten
moechte und nicht mit CP 1251, oder dass man mit ukrainischen
oder altslavischen Schriften arbeiten moechte: Der beste bekannte
Weg unter Windows NT ist es, die entsprechende Codepage auf
die "eigentliche" Codepage C_1251 zu kopieren: dann wird der
erwartete Font angeboten und funktioniert. Analog koennte
man also eine Allegro-Codepage als CP1253 ausgeben (d.h. C_1234.nls
auf C_1254.nls kopieren) und haette dann den OSTWEST-Font
immer dann angeboten, wenn man auf "Tuerkisch" umschaltet
(man koennte sie auch auch C_1252.nls kopieren und haette dann
ein vollstaendig "allegrofiziertes" System). Das alles scheint
mir allerdings sehr drastisch...
In Windows'9x sieht die Sache noch etwas duesterer aus, hier
sind die entsprechenden Zuordnungen von Sprach-Codierung zu
Codepage in der Datei GDI.EXE verborgen, fuer die KOI-8R-Fans
gibt es im Internet downloadbar gepatchte Versionen des GDI.EXE
(fuer jedes der verschiedenen Win'9x natuerlich ein anderes),
die CP1251 durch KOI-8r ersetzen.
Wenn man nun also - wie ich mittlerweile - akzeptiert, dass
der TU-BS-Weg der einzig gangbare ist, um sichtbare und
allegro-Artige Fonts zu erzeugen, tun sich noch weitere
Moeglichkeiten auf: Der zugrundeligende, pervertierte
courier-font enthaelt ja z.B. noch alle griechischen Zeichen,
und man kann mit den "Virtuellen Fonts" von Microsoft etwa
auch noch einen Zeichensatz "Courier allegreek" in der
Registry (oder win.ini) eintragen, der dieselbe .ttf-Datei
benutzt, aber CP1253 als Codepage (indirekt via Einstellung
"161" aus obiger Liste): Damit hat man dann im Bereich der
Zeichen 160-255 die bekannten, unverfremdeten griechischen
Zeichen und im Bereich 128-159 (der ja sowieso nie benutzt
werden sollte) sind die Zeichen belegt, die ueber die
Bastelei mit Codepage 1252 dort explizit hingelegt wurden.
Es sind aber noch diverse Zeichenpositionen absolut unbelegt:
136, 138, 140-143, 152, 154, 156 und 159. Die von Herrn
Allers so oft benoetigten 7 deutschen Sonderzeichen im
ansonsten Griechischen Zeichensatz sollten sich hier also
unterbringen lassen. Natuerlich ist das dann eine voellig
neue Codetabelle, die aus allegro-Sicht einen komplett
anderen Satz von Umcodierungstabellen benoetigt (und
nicht-kompatible Datenbanken), jedenfalls aber braucht
man nicht noch einen zweiten Satz von "Luegen-.ttfs"
zu basteln, sondern haelt die Verheerung in kleinstmoeglichen
Grenzen (problematisch allerdings, dass im Bereich von 128-159
ausgerechnet "u" und "o" mit Doppelakut sind, die werden dann
natuerlich leicht mit "u" und "o" mit Diaerese verwechselt...)
****
Informationen, denen ich nicht nachgegangen bin:
- Auf Systemen (Auch Win'95!!!) mit Internet Explorer 5.0 und
neuer kann ein Programm auf die sogenannten UNISCRIBE .API-
Funktionen zurueckgreifen, die sehr weitgehende Unicode-
Unterstuetzung zulassen. Wenn ich es recht verstanden habe,
koennte ein Programm seine private Zeichentabelle weiterhin
benutzen, aber mit dem Betriebssytem nur ueber Unicode-
Funktionen kommunizieren. Damit waeren so ziemlich alle
Probleme mit a99 und Zeichensaetzen neu zu betrachten und
vermutlich geloest.
- OTF-Fonts (Win 2000 und XP) haben auch noch Encoding-
Tabellen vom Typ 4, die anscheinend beliebige Codepages
mappen koennen. Ich habe aber weder die Betriebssysteme
hier zur Verfuegung noch Werkzeuge fuer die Bearbeitung
dieser Fonts gefunden.
- Windows XP besitzt angeblich ein Unicode-Faehiges RichEdit
control und insgesamt eine wesentlich verbesserte Unicode-
Unterstuetzung, angeblich gehoeren Codepages jetzt der
Vergangenheit an (es gibt in den Executables des Systems
wohl keine nationalen Varianten mehr).
viele Gruesse
Thomas Berger
P.S.: Die von mir beschriebenen Codepages und Fonts liegen
auf dem Braunschweiger ftp-Server als a-cour.zip im Upload-
Verzeichnis.
> > > (In einer heftigen Diskussion mit Windows-Aposteln, die meinten, unter
> > > W-2000 sei das Zeichensatzproblem ein für allemal gelöst, ergab sich hier
> > > neulich als Ergebnis das glatte Gegenteil).
>
> und B. Eversberg hakte nach:
>
> > Ist das irgendwo protokolliert und nachlesbar?
>
> Nein. Es war eine sich über Monate hinziehende
> Auseinandersetzung informellen Charakters mit zum Teil
> wechselnder Besetzung.
>
> > Solche Erkenntnisse koennen vielerorts von Nutzen sein, wo solche
> > Apostel ihr Wesen treiben,
>
> In der Tat. Hätten solche Erkenntnisse vor einem Jahr hier
> vorgelegen, wäre die Allegro-Entwicklung in Athens und
> Thessalonikis Goethe-Instituten nicht um Monate zurückgeworfen
> worden.
>
> > deshalb waere es gut, damit nicht
> > hinter dem Berge zu halten.
>
> Ich hatte mich auf die Endphase besagter Auseinandersetzung
> präpariert, indem ich bei der hiesigen Microsoft-Niederlassung
> anrief und nach einem von Microsoft angebotenen Font frug, der die
> Zeichen des Neugriechischen zusammen mit den deutschen
> Umlauten und dem scharfen s enthielte. Nein, hieß es, da solle ich
> mich an die Firma soundso wenden. Als ich die anrief, fiel mein
> Partner dort aus allen Wolken, daß Microsoft ihn in dieser
> Angelegenheit empfiehlt, und verwies mich an eine andere Firma in
> Berlin. Aber auch diese Firma paßte bei meiner Frage nach dem
> genannten speziellen Font.
>
> ###
>
> Das einzig Neue, was ich an Windows 2000 bisher gegenüber NT
> hinsichtlich der internationalen Zeichensätze gezeigt bekam, war,
> daß man im DOS-Fenster tatsächlich mit dem Zeichensatz schreiben
> kann, auf den man die Tastatur umgestellt hat.
>
> Mit besten Grüßen:
>
> Heinrich Allers
>
> allers at t-online.de * http://home.t-online.de/home/allers
> Gegen unseren Krieg / Contra nuestra guerra:
> http://www.9-11peace.org/index.php3
Mehr Informationen über die Mailingliste Allegro