Mailinglist Archive: opensuse-de (1185 mails)

< Previous Next >
Re: Iconv - locale - Verst ändnisproblem
  • From: Christian Brabandt <cblists@xxxxxxxxxx>
  • Date: Thu, 16 Sep 2010 19:46:04 +0200
  • Message-id: <20100916174604.GG24936@xxxxxxxxxx>
Hi Al!

On Do, 16 Sep 2010, Al Bogner wrote:

Ich verstehe nicht, warum folgendes (wie sonst schon) nicht
funktioniert:

ls -1
äffchen.jpg

Was ist die Ausgangslocale? UTF-8?

Ziel ist eine Variable zu erhalten in der sich "ÄFFCHEN" befindet.

TITLE="„"`basename "$FILE" .jpg | \
sed -e "s/_/ /g" -e "s/'/ /g" -e "s/ / /g"`"“"

In $FILE steht äffchen.jpg?
Das geht auch einfacher:
#v+
chrisbra@r500vm:/tmp$ TITLE=`printf "„äffchen“" | sed -e "s/_/ /g;s/'/ /g;s/
\+/ /g;s/.*/\U&/"`
chrisbra@r500vm:/tmp$ printf "$TITLE\n"
„ÄFFCHEN“
#v-
(geht nur mit GNU sed).

# um Sonderzeichen in Großbuchstaben zu wandeln
export LC_CTYPE=de_DE.iso88591
export LANG=de_DE.ISO-8859-1

Wozu? Du sagst hier, dass die shell allen Input als latin1 ansehen soll.


IMAGETITLE=" "`echo "$TITLE" | iconv -f UTF-8 -t ISO_8859-1 |
tr '[:lower:]' '[:upper:]' | iconv -f ISO_8859-1 -t UTF-8`" "

Und hier verlangst Du, dass iconv vom UTF-8 nach latin1 wandelt. Dabei
sieht die Shell bei $TITLE schon alles als latin1 Bitstrom an.

Außerdem siehe oben, GNU sed kann selber wandeln.


# es sollte von UTF8 nach 8859-1 gewandelt werden,
#danach in Großbuchstaben und wieder zurück zu UTF8

Warum erst von einer Kodierung in die andere wandeln?


# Das Script soll weiter in UTF8 laufen
export LC_CTYPE=de_DE.UTF-8
export LANG=de_DE.UTF-8

iconv: ung�ltige Eingabe-Sequenz an der Stelle 0

Ja, weil „ und “ keine gültigen Kodierungen in latin1 sind. Davon ab,
kann man iconv auch sagen, dass es ungültige Bytes übersetzen soll:
#v+
chrisbra@host:/tmp$ a="„"
chrisbra@host:/tmp$ printf "$a\n"

chrisbra@host:/tmp$ export LANG=de_DE.iso8859-1//TRANSLIT
chrisbra@host:/tmp$ printf "$a\n" |iconv -f UTF-8 -t iso8859-1//TRANSLIT
,,
chrisbra@host:/tmp$ printf "$a\n" |iconv -f UTF-8 -t iso8859-1
iconv: illegal input sequence at position 0
#v-


Mache ich hingegen in einer neu geöffneten Shell direkt folgendes, dann
passt es:

TITLE="österreich"
export LC_CTYPE=de_DE.iso88591
export LANG=de_DE.ISO-8859-1
echo "$TITLE" | iconv -f UTF-8 -t ISO_8859-1 \
| tr '[:lower:]' '[:upper:]' | iconv -f ISO_8859-1 -t UTF-8
ÖSTERREICH

Klar, deine Anführungszeichen fehlen ;)


regards,
Christian
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups
References