[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Wie bringe ich dem xterm utf8 bei?



Andreas Pakulat <apaku@gmx.de> writes:

>On 08.Mai 2005 - 00:59:30, Helmut Waitzmann wrote:
>> Wenn ich ein xterm in einer utf8-locale-Umgebung starte, erhalte ich von
>> ihm die Fehlermeldung:
>> 
>>    $ (locale -a && locale && \
>>    exec xterm -hold -geometry -0+0 -e \
>>         sh -c 'locale && exec ${1+"$@"}' sh cat -- utf8.txt)
>>    de_DE.utf8
>>    de_DE.utf8@euro
>>    en_GB.utf8
>>    en_US.utf8
>>    LANG=de_DE.utf8
>>    LC_CTYPE=de_DE.utf8
>>    LC_NUMERIC=C
>>    LC_TIME=de_DE.utf8
>>    LC_COLLATE=de_DE.utf8
>>    LC_MONETARY=de_DE.utf8
>>    LC_MESSAGES=C
>>    LC_PAPER=de_DE.utf8
>>    LC_NAME=de_DE.utf8
>>    LC_ADDRESS=de_DE.utf8
>>    LC_TELEPHONE=de_DE.utf8
>>    LC_MEASUREMENT=de_DE.utf8
>>    LC_IDENTIFICATION=de_DE.utf8
>>    LC_ALL=
>>    Warning: locale not supported by Xlib, locale set to C
>
>Diese Warnung sollte eigentlich Warnung genug sein. 

Beachte:  Hier warnt das Xlib im xterm.  »locale« warnt nicht.  Es
scheint also mit dem Locale zufrieden zu sein.  Im Gegensatz dazu warnt
»locale« bei Locales, die es nicht kennt, durchaus:

Ein Beispiel für ein dem Programm »locale« unbekanntes Codeset:

   $ LC_CTYPE=de_DE.ISO-8859-15 locale
   locale: Cannot set LC_CTYPE to default locale: No such file or directory
   locale: Cannot set LC_ALL to default locale: No such file or directory
   LANG=C
   LC_CTYPE=de_DE.ISO-8859-15
   LC_NUMERIC=C
   LC_TIME=de_DE
   LC_COLLATE=de_DE
   LC_MONETARY=de_DE
   LC_MESSAGES=C
   LC_PAPER=de_DE
   LC_NAME=de_DE
   LC_ADDRESS=de_DE
   LC_TELEPHONE=de_DE
   LC_MEASUREMENT=de_DE
   LC_IDENTIFICATION=de_DE
   LC_ALL=

Ein Beispiel für ein unbekanntes Language und Territory:

   $ LC_CTYPE=fr_FR locale
   locale: Cannot set LC_CTYPE to default locale: No such file or directory
   locale: Cannot set LC_ALL to default locale: No such file or directory
   LANG=C
   LC_CTYPE=fr_FR
   LC_NUMERIC=C
   LC_TIME=de_DE
   LC_COLLATE=de_DE
   LC_MONETARY=de_DE
   LC_MESSAGES=C
   LC_PAPER=de_DE
   LC_NAME=de_DE
   LC_ADDRESS=de_DE
   LC_TELEPHONE=de_DE
   LC_MEASUREMENT=de_DE
   LC_IDENTIFICATION=de_DE
   LC_ALL=

Das sieht also nach einem Konfigurationsproblem mit dem Xlib aus.

>2 Dinge:
>
>1. dpkg-reconfigure locales

Das hatte ich zuvor schon gemacht.  Aber für den Fall, dass es etwas
nützt:

# dpkg-reconfigure locales

Ich habe alle locales ausgewählt, deren Name mit de_DE, en_US oder en_GB
beginnt, das waren diese hier:

de_DE.UTF-8 UTF-8
de_DE.UTF-8@euro UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
en_GB.UTF-8 UTF-8
en_GB ISO-8859-1
en_GB.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15

Das Locale fr_FR, das auch zur Wahl steht, habe ich nicht ausgewählt.

Jetzt ein xterm (wie im OP) gestartet:  Der Fehler tritt noch immer auf.
An einem fehlenden »dpkg-reconfigure locales« liegt es also nicht.

>2. de_DE.UTF-8

>Die Kodierung wird gross geschrieben und nicht klein.

Du hast recht, s.u.

Wie kommt man an die Liste der installierten locales?  Ich habe mich bei
»locale -a« umgesehen.  Ist »locale -a« nicht genau dafür vorgesehen?

»locale -a« kennt noch immer keine ».UTF-8«-Locales (wie schon zuvor
auch):

$ locale -a
C
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
de_DE.utf8@euro
deutsch
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
german
POSIX

Das Manual-Page setlocale(3) sieht ebenfalls »locale -a« als Quelle
der Liste aller unterstützten locales an.  Allerdings führt es als
Beispiel für ein codeset »UTF-8« an:

       A locale name is typically of the form
       language[_territory][.codeset][@modifier], where language is an
       ISO 639 language code, territory is an ISO 3166 country code, and
       codeset is a character set or encoding identifier like ISO-8859-1
       or UTF-8.  For a list of all supported locales, try "locale -a",
       cf. locale(1).

Das Manual-Page locale(1) bekräftigt die Auskunft über installierte
Locales:

       -a, --all-locales

               Write names of available locales.

Es findet sich dort zwar auch noch:

   FILES
          /usr/share/i18n/SUPPORTED
                  List of supported values (and their associated
                  encoding) for the locale name.  This representation is
                  recommended over --all-locales one, due being the
                  system wide supported values.

»/usr/share/i18n/SUPPORTED« ist aber nicht sehr vertrauenserweckend, da
darin alle installierbaren (z.B. auch »fr_FR«), nicht nur die tatsächlich
installierten locales enthalten sind, jedoch keine mit ».utf8«, nur mit
».UTF-8«.

Aber du hast dennoch recht:

   $ xterm -hold -geometry -0+0 -e \
        sh -c 'locale && exec ${1+"$@"}' sh cat -- utf8.txt

(wie im OP) zeigt jetzt keine Fehlermeldungen, aber das gewünschte Ergebnis:

   LANG=de_DE.UTF-8
   LC_CTYPE=de_DE.UTF-8
   LC_NUMERIC=C
   LC_TIME=de_DE.UTF-8
   LC_COLLATE=de_DE.UTF-8
   LC_MONETARY=de_DE.UTF-8
   LC_MESSAGES=C
   LC_PAPER=de_DE.UTF-8
   LC_NAME=de_DE.UTF-8
   LC_ADDRESS=de_DE.UTF-8
   LC_TELEPHONE=de_DE.UTF-8
   LC_MEASUREMENT=de_DE.UTF-8
   LC_IDENTIFICATION=de_DE.UTF-8
   LC_ALL=
   ߤ€

Woher kommt die Diskrepanz zwischen der Liste der installierten Locales
und der Ausgabe von »locale -a«?  Liegt da ein Fehler bei »locale« vor
oder fehlt der Konfiguration der Locales noch etwas?

>>    *VT100.font2:	-*-fixed-medium-r-normal-*-*-50-98-108-c-*-iso8859-*
>
>Ich bin nicht sicher, aber die VT100 Fonts sollten auf eine iso10646
>Kodierung zeigen nicht auf iso8859

Das scheint nicht notwendig zu sein:  Es gibt es X-Resources der
Form (siehe OP)

*VT100.utf8Fonts.?

die bei Verwendung des Locales de_DE.UTF-8 (s.o.) beachtet werden.
-- 
Wenn Sie mir E-Mail schreiben, stellen |  When writing me e-mail, please
Sie bitte vor meine E-Mail-Adresse     |  precede my e-mail address with
meinen Vor- und Nachnamen, etwa so:    |  my full name, like
Helmut Waitzmann <xxx@example.net>, (Helmut Waitzmann) xxx@example.net



Reply to: