UTF-8
Aus Gentoo Linux Wiki
| Terminals / Shells • X • Portage • System • Dateisysteme • Kernel • Netzwerk• Sonstiges • alphabetischer Tipp Index |
Wenn du noch dabei bist, dein System auf deutsch umzustellen, dann lies auch bitte folgenden Artikel: Deutsche Lokalisierung
[Bearbeiten] Warum Unicode?
Aus [1]: Im Grunde genommen arbeiten Computer nur mit Zahlen. Sie speichern Buchstaben und andere Zeichen, indem sie jedem von ihnen eine Zahl zuweisen. Bevor Unicode erfunden wurde, gab es hunderte verschiedener Kodierungssysteme, um diese Zahlen zuzuordnen. Keine einzige Kodierung konnte genügend Zeichen beinhalten: zum Beispiel benötigt die Europäische Union alleine einige verschiedene Kodierungen, um alle Sprachen abzudecken. Selbst für eine einzelne Sprache wie dem Deutschen war keine einzige Kodierung adäquat für alle Buchstaben, Punktionen und technische Symbole im alltäglichen Gebrauch.
Diese Kodierungssysteme sind außerdem im Konflikt miteinander. Das heißt, zwei verschiedene Kodierungen können die gleiche Zahl für zwei verschiedene Zeichen oder verschiedene Zahlen für dasselbe Zeichen benutzen. Jeder vorhandene Computer (vor allem Server) muss eine Vielzahl unterschiedlicher Kodierungen unterstützen; jedoch besteht jedesmal wenn Dateien zwischen zwei verschiedenen Kodierungen oder Plattformen fließen, für diese Dateien immer das Risiko einer Verfälschung.
Unicode ändert all das!
Unicode sieht eine eindeutige Zahl für jedes Zeichen vor, egal welche Plattform, egal welches Programm, egal welche Sprache.
Man sollte die Bemerkung machen, dass der oben stehende Text ein wenig verschwommen formuliert ist. Zur Klarstellung: Unicode ist eine Zahl<->Zeichen Zuordnung aber keine Kodierung im Sinne einer Verschlüsselung. Die tatsächliche Kodierung der Zahlen in Bits gibt es in verschiedenen Ausführungen wie UTF-8, UTF-EBCDIC, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, UCS-2, und UCS-4. Demnach zu sagen, dass Unicode Kodierungsprobleme abschafft, ist eine Übertreibung. Diese Kodierungen treten zumindest nicht miteinander in Konflikt.
[Bearbeiten] Useflags
In /etc/make.conf die folgende useflags hinzufügen:
| Datei: /etc/make.conf |
USE="unicode nls" |
Und die neu gesetzten Useflags ins System einstricken.
| Code: |
emerge world --update --newuse |
[Bearbeiten] Kernel-Einstellungen
Um Unicode im Kernel zu aktivieren, muss folgende Einstellung vorgenommen werden: File systems ---> Native Language Support --->:
| Datei: /usr/src/linux/.config |
(utf8) Default NLS Option <*> NLS UTF8 |
Jetzt werden alle Dateinamen standardmäßig in UTF-8 gespeichert, nachdem der Kernel neu kompiliert wird.
[Bearbeiten] Lokalitätseinstellungen
[Bearbeiten] /etc/locale.gen
de_DE.UTF-8 UTF-8 en_US.UTF-8 UTF-8
Die englische Lokaldatei zu installieren hilft in einigen Fällen, in denen nach dem Befolgen dieses HowTos weder in den Terminals noch in OpenOffice.org Umlaute und Sonderzeichen funktionieren. Siehe dazu auch diesen Thread auf gentoo-user-de [2]. Danach ein locale-gen ausführen (das Programm locale-gen ist in neueren Versionen der glibc - sollte es nicht vorhanden sein, empfiehlt es sich, glibc zu updaten). Eine vorhandene /etc/locales.build löschen, da sie veraltet ist.
Alternativ zu locale-gen kann man die locale de_DE.UTF-8 manuell erstellen:
| Code: |
localedef -c -f UTF-8 -i de_DE de_DE.UTF-8 |
Durch Aufruf von locale -a werden die aktuell installierten Lokaldateien aufgelistet. Hierbei ist die Angabe von "utf8" zu "UTF-8" gleichwertig.
Danach Locale auf UTF-8 und Deutsch stellen (auf Groß-/Kleinschreibung achten!):
| Datei: /etc/env.d/02locale |
LANG="de_DE.UTF-8" LC_ALL="de_DE.UTF-8" GDM_LANG="de_DE.UTF-8" |
Unterstützte Lokaldateien sind bei Nutzung der glibc in der Datei /usr/share/i18n/SUPPORTED aufgelistet.
Zeilen in SUPPORTED haben das Format <locale> <charmap>. Für die Angabe in /etc/env.d/02locale ist nur der Teil <locale> anzugeben.
danach sollte folgendes ausgeführt werden
| Code: |
# env-update >>> Regenerating /etc/ld.so.cache... * Caching service dependencies ... # source /etc/profile |
[Bearbeiten] Tastatur-Konfiguration
| Datei: /etc/rc.conf |
UNICODE="yes" |
| Datei: /etc/conf.d/keymaps |
KEYMAP="de-latin1" # Alternativ: #KEYMAP="de-latin1-nodeadkeys" |
Das "-u" bei KEYMAP darf beim aktuellen "base layout" nicht mehr verwendet werden.
[Bearbeiten] Windows-Partitionen
Falls man noch (alte) vfat- Partitionen (und/oder USB-Sticks oder ähnliches) im System hängen hat muss man auf jeden Fall noch die mount- Optionen anpassen.
| Datei: /etc/fstab |
/dev/hdxY /mnt/windows1 vfat iocharset=utf8,codepage=850 0 0 /dev/hdxY /mnt/windows2 ntfs nls=utf8 0 0 //samba2/share /mnt/windows3 smbfs iocharset=utf8,codepage=cp850 0 0 //samba3/share /mnt/windows4 smbfs iocharset=utf8 0 0 /dev/cdrom /media/cdrom udf,iso9660 iocharset=utf8,ro,user,noauto 0 0 |
Wenn nötig kann man mit uid,gid und umask die Besitzverhältnisse und Rechte klären.
Es gibt einen Unterschied zwischen Samba2.2 (DOS, Win9x, WinMe) und Samba3 (Win2000/XP). Siehe auch http://us5.samba.org/samba/docs/man/Samba3-HOWTO/unicode.html
Achtung: vfat benötigt 850, smbfs hingegen cp850 als codepage-Parameter!! Man kann diese Werte auch standardmäßig in der Kernelkonfiguration festlegen, damit diese auch von HAL verwendet werden.
[Bearbeiten] Samba
Im Kernel folgende Option rausnehmen, falls diese gesetzt ist:
File systems --->
Network File Systems --->
<M> SMB file system support (to mount Windows shares etc.)
[ ] Use a default NLS
Windows NT/200*/XP sind in der Lage UTF-8 zu verarbeiten. Bei DOS oder Win 9*/Me Clients wird sie benötigt, weil diese Betriebssysteme kein UTF-8 beherrschen und auf cp850 angewiesen sind.
Alternativ kann man auch CIFS nutzen:
File systems --->
Network File Systems --->
<M> CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers)
[Bearbeiten] Einstellen der Konsole
In ~/.bashrc folgendes hinzufügen
| Datei: ~/.bashrc |
if [ $TERM = "linux" ] then /usr/bin/unicode_start fi |
um die Konsole auf Unicode während des Bootens zu stellen.
Sollte laut: http://www.gentooforum.de/post/48472/geloest-Unicode-und-konsole-in-KDE-341.html#post48472
nicht mehr nötig sein, da dies durch
| Datei: /etc/rc.conf |
UNICODE=yes |
in der rc.conf bereits geschieht.
Anschliessend kann ein umfangreicherer Font eingestellt werden:
| Datei: /etc/conf.d/consolefont |
CONSOLEFONT=LatArCyrHeb-16 # Latin, Arabisch (nur isolierte Formen, Cyrillisch, Hebraeisch) # siehe auch /usr/bin/unicode_start (shell script) |
[Bearbeiten] Anwendungen
[Bearbeiten] x11-base/xorg-x11
Um Probleme beim Starten einiger Anwendungen, darunter fluxbox und sylpheed-claws zu vermeiden, sollte xorg mit dem Use-Flag +cjk emerged werden (diese Anwendungen brauchen sehr lange zum Starten und verbrauchen immense CPU-Ressourcen dabei).
Für Fluxbox existieren inzwischen Release Candidates der Version 1.0, die verbesserte UTF-8-Unterstützung mitbringen.
[Bearbeiten] Terminals
xterm läuft in Unicode indem es so gestartet wird:
| Code: xterm unicode |
xterm -u8 |
urxvt vom rxvt-unicode Paket läuft immer in Unicode.
Alternativ reicht ein Eintrag in der ~/.Xresources:
| Code: xterm unicode |
XTerm*locale: true |
Anschließend muß noch xrdb -merge .Xresources ausgeführt werden.
Um in xterm Unicode-Zeichen einzugeben, insbesondere solche, die nicht direkt auf der Tastatur verfügbar sind, hält man die Tasten Ctrl+Shift gedrückt und tippt den Hexwert nnnn des Zeichens. Hierbei ist nicht der UTF-8-kodierte Wert, sondern Wert aus der Unicode-Notation U+nnnn zu verwenden.
Dieser Trick funktioniert übrigens auch bei sehr vielen anderen Programmen.
[Bearbeiten] Editoren
[Bearbeiten] Emacs
Sollten Probleme mit Umlauten oder anderen Sonderzeichen auftauchen, einfach folgende Zeilen an ~/.emacs hängen:
| Datei: ~/.emacs |
(setq locale-coding-system 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (set-selection-coding-system 'utf-8) (prefer-coding-system 'utf-8) |
[Bearbeiten] Vim
Füge das .vimrc hinzu, um Vim zu UTF-8 Darstellung zu bewegen:
| Datei: ~/.vimrc |
set enc=utf-8 |
Zusätzlich das:
| Datei: ~/.vimrc |
set fenc=utf-8 |
um Unicode intern und beim Schreiben von Dateien zu benutzen. Wenn man auch für seine Terminals UTF-8 benutzt (weshalb man diesen Tipp vermutlich liest) muss man auch noch
| Datei: ~/.vimrc |
set termencoding=utf-8 |
eintragen.
Zum Eingeben von Unicode-Zeichen, insbesondere solcher, die nicht auf der Tastatur verfügbar sind, benutzt man im Einfügen-Modus die Tastenkombination CTRL-V, gefolgt von u und dem Hexwert nnnn des Zeichens. Hierbei ist nicht der UTF-8-kodierte Wert, sondern der Wert aus der Unicode-Notation U+nnnn zu verwenden.
[Bearbeiten] KWrite
KWrite starten, dann im Menü "Einstellungen" "Editor einrichten" auswählen. Im Unterpunkt "Öffnen/Speichern" ganz oben die Kodierung auf "utf8" umstellen.
[Bearbeiten] Kate
Kate starten, dann im Menü "Einstellungen" "Kate einrichten..." auswählen. Im Unterpunkt "Öffnen/Speichern" ganz oben die Kodierung auf "utf8" umstellen.
[Bearbeiten] Mail
[Bearbeiten] kmail
Im Menü "Einstellungen" Menüpunkt "Kmail einrichten" aufrufen.
Sektion "Erscheinungsbild" auswählen und hier den Reiter "Nachrichtenfenster" anklicken.
In der Auswahlbox "Standardcodierung"
| Code: |
Unicode (utf-8) |
und Auswahlbox "Original-Zeichensatz übergehen ... "
| Code: |
Automatisch |
auswählen.
Weiter im Menü "Kmail Einrichten" unter Sektion "Komposer" den Reiter "Zeichensätze" klicken. In der Liste folgende Einträge hinzufügen:
| Code: |
|
iso-8859-1 |
[Bearbeiten] mutt
Mutt sollte ohne Probleme auf einer Unicodekonsole laufen. Aber falls man pretty-printing benutzen will, muss man etwas tricksen, da a2ps keine Unterstützung für UTF-8 besitzt. Dazu emerged man recode und a2ps:
| Code: |
emerge recode a2ps |
und benutzt das in
| Datei: ~/.muttrc |
set print_command="recode UTF-8..Latin-1 | a2ps -1 --portrait --borders=no -X latin1 --pretty-print=mail --strip 1 --highlight-level=heavy -P printername" |
[Bearbeiten] Sylpheed-Claws
Für das Drucken mit Sylpheed gilt das gleiche wie bei Mutt; Drucken mit a2ps und recode.
| Code: |
emerge recode a2ps |
| Code: |
Druckbefehl: cat %s | recode ..latin-1 | a2ps -1 --portrait --borders=no -X latin1 --pretty-print=mail --strip 1 --highlight-level=heavy -P printername |
Bzw. bei verwendung von Sylpheed und KDE:
| Code: |
Druckbefehl: cat %s | recode ..latin-1 | a2ps -1 --portrait --borders=no -X latin1 --pretty-print=mail --strip 1 --highlight-level=heavy | kprinter --stdin |
[Bearbeiten] /bin/mail
mail-client/mailx kann nicht mit UTF-8 umgehen. mail-client/nail kann es schon.
| Code: |
emerge --unmerge mailx emerge nail |
Man kann allerdings beispielsweise folgenderweise mit /bin/mail von mail-client/mailx eine UTF-8 codierte Mail versenden (getestet mit Version 8.1.2.20050715-r1):
| Code: |
echo "utf8 codierter Text... äöü€" | mail -a "Content-Type: text/plain; charset=utf-8" -s "${subject}" ${empfaenger}
|
[Bearbeiten] Newsreader
[Bearbeiten] slrn
slrn benötigt momentan entweder eine ISO-8859-1-Konsole oder luit:
| Code: |
LC_ALL=de_DE.iso88591 LANG=de_DE.iso88591 xterm -fn "-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1" -e slrn |
| Code: |
LC_ALL=de_DE.iso88591 LANG=de_DE.iso88591 luit slrn |
[Bearbeiten] Shells
[Bearbeiten] bash
Bash ist Unicode-fähig seit Version 2.05b und bei Benutzung von readline ab Version 4.3.
[Bearbeiten] zsh
Ab Version 4.3.2 ist die zsh voll Unicode-fähig.
[Bearbeiten] X
[Bearbeiten] fluxbox
Fluxbox lädt sehr lange mit einer UTF-8 Lokaldatei [3]. Ein Workaround ist mit diesem alias möglich:
| Datei: ~/.bashrc |
alias startx="LC_ALL='C' startx" |
anschließend die Lokaldatei auf UTF-8 zurücksetzen nachdem Fluxbox gestartet ist, aber bevor man irgendetwas anderes startet:
| Datei: ~/.fluxbox/startup |
export LC_ALL="de_DE.utf8" |
Es gibt auch diesen Workaround: # USE="disablexmb" emerge fluxbox
Am besten dann noch in die /etc/portage/package.use eintragen
x11-wm/fluxbox disablexmb
[Bearbeiten] OpenOffice.org
Damit OpenOffice.org UTF-8 richtig einsetzt, ist es nötig, die Umgebungsvariable LANGUAGE korrekt einzustellen. Dies kann zum Beispiel in der .bashrc geschehen, besser ist es jedoch, die Einstellung global vorzunehmen, z.B. über die Datei /etc/env.d/02locales:
| Datei: /etc/env.d/02locales |
LANG="de_DE.utf8" ...eine Menge anderer LC-Variablen... # For OpenOffice.org LANGUAGE="de_DE:de:en_GB:en" |
Anschließend das obligatorische env-update && source /etc/profile nicht vergessen. Wenn OpenOffice.org über das Gnome/KDE/WhatEver-Menü gestartet wird, kann es notwendig sein, sich neu einzuloggen.
[Bearbeiten] XMMS
XMMS ist leider nicht direkt UTF-8 fähig. Als Ersatz eignet sich der Beep-Media-Player hervorragend. Er ist ein GTK-2.0 basierender unicodefähiger XMMS-Clone.
emerge -av beep-media-player
Natürlich gibt es für BMP (Beep Media Player) auch jede Menge Plugins und Themen:
emerge -s bmp
Es gibt aber noch einen anderen Weg, dazu muss man sich eine GTK-1-Konfigurationsdatei erstellen: gtkrc.utf8. Dazu nimmt man eine vorhandene und kopiert diese:
cp /etc/gtk/gtkrc.iso-8859-14 /etc/gtk/gtkrc.utf8
Diese muss man nun noch editieren, um jedes "iso-8859-14" durch ein "utf8" zu ersetzen:
nano /etc/gtk/gtkrc.utf8
Sie sollte dann so aussehen:
style "gtk-default-utf8" {
fontset = "-*-helvetica-medium-r-normal--12-*-*-*-*-*-utf8,\
-*-arial-medium-r-normal--12-*-*-*-*-*-utf8,\
-*-helvetica-medium-r-normal--12-*-*-*-*-*-utf8,\
-*-arial-medium-r-normal--12-*-*-*-*-*-utf8,*-r-*"
}
class "GtkWidget" style "gtk-default-utf8"
Nun sollte XMMS Umlaute korrekt darstellen.
[Bearbeiten] KDE
[Bearbeiten] konsole
Beim KDE-Terminal "konsole" ist es eventuell nötig unter "Einstellungen -> Kodierung" auf utf8 umzustellen. Anscheinend geschieht dies nicht immer automatisch, selbst wenn sonst alles auf Unicode umgestellt ist. "Einstellungen -> Als Standard speichern" erspart einem diesem Schritt in zukünftigen Sitzungen.
[Bearbeiten] konqueror
Eine weitere Falle lauert bei der Benutzung des praktischen "fish://"-KIOslaves. Standardmäßig ist die Zeichenkodierung für die Datei- und Ordnernamen des Fremdrechners auf Latin1 gestellt. Ändern kann man das über "Extras -> Entfernte Zeichenkodierung wählen". Diese Einstellung merkt sich Konqueror zukünftig für weitere fish-Sessions.
[Bearbeiten] Dienste
[Bearbeiten] Apache2
Damit Verzeichnislisting und Dateinamen mit Umlauten richtig angezeigt werden, muss der Standard-Zeichensatz auf UTF-8 gesetzt werden.
| Datei: /etc/apache2/httpd.conf |
AddDefaultCharset UTF-8 |
[Bearbeiten] Dateinamen
Um Dateinamen, die noch im alten ISO-Standard abgespeichert wurden, nach UTF8 zu ändern, führe folgendes Kommando aus:
convmv -f iso-8859-1 -t utf8 -r --notest *
- -r sorgt dafür, dass die Verzeichnisse rekursiv durchgegangen werden, ab dem Verzeichnis, in dem man sich gerade befindet.
- --notest ist nötig, damit die Dateien auch vollständig umbenannt werden.
Sollte convmv noch nicht installiert sein, hilft dir ein:
emerge -av convmv
[Bearbeiten] Dateiinhalte
Um (Text-) Dateien, die noch als bspw. latin1 abgespeichert wurden nach UTF8 zu encodieren führe folgendes Kommando aus:
recode latin1..u8 FILENAME
Um dies rekursiv für alle Dateien eines Types durchzuführen, genügt folgender Einzeiler:
find . -name '*.php' -exec recode latin1..u8 {} \;
Dieses Script wandelt alle .php Dateien rekursiv von latin1 nach UTF8 um.
Aber Achtung: wende recode niemals auf binäre Dateien wie bspw. jpgs an!
Wenden Sie recode NIEMALS auf bereits mit UTF-8 kodierten Files an, dass führt zu einem riesigem Zeichen wirrwar!
Sollte recode noch nicht installiert sein, hilft dir ein:
emerge -av recode
[Bearbeiten] MP3 Tags
MP3 Tags werden normalerweise in ISO-8859-1 abgespeichert. Man kann diese in UTF-8 abspeichern, aber das führt öfters zu Tag-Problemen. BMP zum Beispiel kann man unter Einstellungen -> Plugins -> MPEG Audio Plugin auf der Reiterseite "Titel" einstellen "Nicht-UTF8 ID3 Tags zu UTF-8 konvertieren", und unter ID3-Enkodierung schreibt man iso-8859-1.
[Bearbeiten] less
| Datei: /etc/env.d/70less |
LESSCHARSET="utf-8" |
Zur Info: less verwendet automatisch utf-8, wenn die Umgebumsvariablen LC_ALL oder LANG den String "UTF-8" enthalten.
[Bearbeiten] Probleme
Ein Kosmetik-Problem:
Beim booten kommt es bei ext2/ext3-formatierten Festplatten manchmal dazu, daß sie überprüft werden (müssen). fsck gibt dabei einen deutschen UTF-8-String aus, der Umlaute enthält. Diese werden dann aber fehlerhaft dargestellt. Die Ursache ist die noch nicht vorhandene Unicode-Unterstützung in dieser frühen Phase des Systemstarts. Eine bequeme Lösung ist es, die Ausgabe des Programms auf Englisch zu belassen. Dazu entziehen wir ihm dem "Nativ Language Support", mit dem Useflag -nls:
Nach dem hinzufügen dieser Zeile in /etc/portage/package.use...
# echo "sys-fs/e2fsprogs -nls" >> /etc/portage/package.use
..das neu emergen nicht vergessen!
# emerge -N sys-fs/e2fsprogs
[Bearbeiten] Links
- Deutsche Lokalisierung
- PDF UTF-8 mit Gentoo/Linux
- Unicode HowTo from TLDP
- Detailed Overview of Using Unicode in Linux
-- Initially published by Björn Michaelsen 04:00, 21 Nov 2004 (GMT) on http://gentoo-wiki.com under the GNU Free Documentation License.
