PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichensätze, Umlaute *würg*



Joker
25-04-2008, 09:39
Hallo,

ich habe nervige Probleme mit den Zeichensätzen und Umlauten.

Maschine 1:


> uname -a
Linux irgendwas 2.6.5-7.244-s390x #1 SMP Mon Dec 19 10:44:01 UTC 2005 s390x s390x s390x GNU/Linux


Wenn ich aus einer db2-DB was exportiere, werden die Umlaute nicht richtig dargestellt. Es entstehen dann immer irgendwelche Fantasie-Zeichen, z.B.

München

Irgendwie fühlt sich da niemand dafür zuständig, also korrigiere ich das mit sed:

sed "s/ü/ü/g"

Das funktioniert auch bei den Umlauten ä, ö, ü.

Allerdings:

StraÃenbau
(den sed mach dafür als letztes, weil hier nur dieses à steht, sonst würden ja auch die anderen Zeichenketten geändert werden, die mit à anfangen und aber noch z.B. ¼ folgt.)

Mit

sed 's/Ã/ß/g'
wird daraus aber
StrassM-^_enbau

Diese M-^_ war vorher noch nicht da. Wie bekomme ich das am besten weg?
Statt ß wäre auch ss ok.


Zum Glück ist heute Freitag, dieser Sch... ist echt total nervig. :-(


Danke schonmal für Tipps!

undefined
25-04-2008, 10:08
Das liegt daran das du nicht verstanden hast wo dein Problem liegt ;)
Wenn deine Konsole eine UTF-8 unterstützung hat und deine Datenbank in LATIN1 ist dann bekommst du solche Probleme.
Abhilfe ist der Richtige export mit Zeichnsatz.
z.B: beim export den Zeichensatz angeben.
oder

LC_ALL=<mein gewünschter zeichensatz> <programm> <argumente>
oder

iconv -f LATIN1 -t UTF-8 meine_export.sql > neue_utf8.sql

Joker
25-04-2008, 10:16
Cool, danke für den Hinweis! Damit funktionierts:


iconv -f UTF-8 -t LATIN1

Die Konsole hat UTF-8.
Den iconv-Befehl kannte ich nicht.



> locale -v
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

undefined
25-04-2008, 10:21
Ja, das ist das übliche UTF-8 Problem.
Die bessere Variante ist aber wenn du Tempörär deinen Zeichensatz veränderst, wenn die DB in LATIN1 ist.
Also eher:


LC_ALL=ISO-8859-1 export-db meinedb
## dann Konvertieren
iconv -t LATIN1 -f UTF-8 meinedb.sql > meinedb-utf8.sql