Hi,
ich entwickle gerade ein kleines Programm, um japanische Schriftzeichen (Kanji) zu lernen. Dazu muß ich natürlich offensichtlich japanische Schriftzeichen darstellen, also neben Kanj auch Kana (zwei Silbenschriften) und gemischten Text mit deutschem/englischem Text und japanischen Zeichen.
Das hat auf den ersten Blick erstmal überraschend gut funktioniert, die Kana wurden trotz Default-Font (Tahoma o.ä.) perfekt dargestellt und die Kanji sahen auf den ersten Blick auch OK aus.
Zwischenzeitlich ist mir aber aufgefallen, daß für die Kanji kein japanischer Zeichensatz (MS Gothic oder MS Mincho) verwendet wird, sondern ein chinesischer (MingLiU oder sowas). Einige Zeichen sehen in beiden Sprachen/Fonts gleich aus, aber andere unterscheiden sich mehr oder weniger stark.
Mein erster Versuch war, den richtigen Zeichensartz zu erzwingen:
Aber damit schaltet man den Zeichensart halt komplett um. Das ist OK für das Text/Labels, in denen nur japanische Zeichen vorkommen, aber für gemischten Text sieht das absolut furchtbar aus. "MS PGothic" ist etwas besser, aber das Kernproblem dabei ist, daß dann halt auch die "lateinischen" Buchstaben aus dem japanischen Zeicheensatz kommen.
Nach einiger Recherche habe ich rausgefunden, daß der Fallback-Mechanismus für nicht existierende Zeichen im eingestellten Zeichensatz über die Datei "fontconfig.properties" eingestellt werden kann. Dort stehen leider chinesische Fonts vor den japanischen, was mein Problem erklärt.
Wenn ich die entsprechende Datei "fontconfig.properties.src" aus dem "lib"-Verzeichnis der JRE/JDK als "fontconfig.properties" ablege und "japanese" vor "chinese..." schiebe, verhält sich alles wie gewünscht. So weit , so gut.
Nur ist das natürlich irgendwie keine so wirklich tolle Lösung. Ich habe derzeit über 30 Java Runtimes installiert, weil ja inzwischen jede Eclipse-IDE ihre eigen Runtime mitbringt usw. Außerdem ist es etwas viel verlangt, daß potentielle Anwender mit unterdurchschnittlichen PC-Kenntnissen Konfigurationdateien in irgendwelchen JRE-Ordnern kopieren und editieren müssen.
Aber anscheinend kann man diese Font Properties nicht über System.setProperty() o.ä. ändern. Zumindest habe ich dazu nichts gefunden.
Langer Rede kurzer Sinn:
Gibt es irgendeine (möglichst einfache, elegante) Lösung, den Fallback-Mechanismus für fehlende Zeichen in Zeichensätzen in der oben beschriebenen Form (Japanisch vor Chinesisch) zur Laufzeit zu ändern, also ohne die Einstellung für die ganze JRE/JDK permanent über eine Konfigurationsdatei zu ändern?
Und um das nochmal klarzustellen: ich will weder die Spracheinstellung auf Japanisch ändern noch den Zeichensatz komplett auf Japanisch umstellen. Ich will lediglich den Fallback-Mechanismus so ändern, daß für UTF8-Kanji-Zeichen der japanische Zeichensatz und nicht der chinesische benutzt wird.
ich entwickle gerade ein kleines Programm, um japanische Schriftzeichen (Kanji) zu lernen. Dazu muß ich natürlich offensichtlich japanische Schriftzeichen darstellen, also neben Kanj auch Kana (zwei Silbenschriften) und gemischten Text mit deutschem/englischem Text und japanischen Zeichen.
Das hat auf den ersten Blick erstmal überraschend gut funktioniert, die Kana wurden trotz Default-Font (Tahoma o.ä.) perfekt dargestellt und die Kanji sahen auf den ersten Blick auch OK aus.
Zwischenzeitlich ist mir aber aufgefallen, daß für die Kanji kein japanischer Zeichensatz (MS Gothic oder MS Mincho) verwendet wird, sondern ein chinesischer (MingLiU oder sowas). Einige Zeichen sehen in beiden Sprachen/Fonts gleich aus, aber andere unterscheiden sich mehr oder weniger stark.
Mein erster Versuch war, den richtigen Zeichensartz zu erzwingen:
Java:
fontKanji = new Font("MS PMincho", Font.PLAIN, (int)Core.fontSizeKanji);
Nach einiger Recherche habe ich rausgefunden, daß der Fallback-Mechanismus für nicht existierende Zeichen im eingestellten Zeichensatz über die Datei "fontconfig.properties" eingestellt werden kann. Dort stehen leider chinesische Fonts vor den japanischen, was mein Problem erklärt.
C-ähnlich:
sequence.fallback=symbols,\
chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\
japanese,korean,chinese-ms950-extb,chinese-ms936-extb,\
georgian,devanagari,bengali,gujarati,gurmukhi,kannada,\
malayalam,oriya,sinhala,tamil,telugu,thai,khmer,mongolian,\
myanmar
Wenn ich die entsprechende Datei "fontconfig.properties.src" aus dem "lib"-Verzeichnis der JRE/JDK als "fontconfig.properties" ablege und "japanese" vor "chinese..." schiebe, verhält sich alles wie gewünscht. So weit , so gut.
Nur ist das natürlich irgendwie keine so wirklich tolle Lösung. Ich habe derzeit über 30 Java Runtimes installiert, weil ja inzwischen jede Eclipse-IDE ihre eigen Runtime mitbringt usw. Außerdem ist es etwas viel verlangt, daß potentielle Anwender mit unterdurchschnittlichen PC-Kenntnissen Konfigurationdateien in irgendwelchen JRE-Ordnern kopieren und editieren müssen.
Aber anscheinend kann man diese Font Properties nicht über System.setProperty() o.ä. ändern. Zumindest habe ich dazu nichts gefunden.
Langer Rede kurzer Sinn:
Gibt es irgendeine (möglichst einfache, elegante) Lösung, den Fallback-Mechanismus für fehlende Zeichen in Zeichensätzen in der oben beschriebenen Form (Japanisch vor Chinesisch) zur Laufzeit zu ändern, also ohne die Einstellung für die ganze JRE/JDK permanent über eine Konfigurationsdatei zu ändern?
Und um das nochmal klarzustellen: ich will weder die Spracheinstellung auf Japanisch ändern noch den Zeichensatz komplett auf Japanisch umstellen. Ich will lediglich den Fallback-Mechanismus so ändern, daß für UTF8-Kanji-Zeichen der japanische Zeichensatz und nicht der chinesische benutzt wird.