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:
Was ist die Ausgangslocale? UTF-8?
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).
Wozu? Du sagst hier, dass die shell allen Input als latin1 ansehen soll.
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.
Warum erst von einer Kodierung in die andere wandeln?
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-
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
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 > |