Mailinglist Archive: opensuse-de (1185 mails)

< Previous Next >
Re: Iconv - locale - Verständnisproblem
  • From: Al Bogner <suse-linux@xxxxxxxxxxxxxxxxxxxx>
  • Date: Thu, 16 Sep 2010 20:36:39 +0200
  • Message-id: <20100916203639.7063fe6a@xxxxxxxxxxxxxxxxxxxx>
Am Do, 16 Sep 2010 19:46:04 CEST schrieb Christian Brabandt:

Hi Christian,

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?

ja (Standard OS 11.2)

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?

ja, war aber nur ein simples Beispiel. Die Dateien verwenden auch span.
Sonderzeichen, etc.

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.

Damit tr in Großbuchstaben wandeln kann.

Ich werde mir deinen Vorschlag anschauen, ob der überall passt.


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.

wusste ich nicht.

# 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?

Ich bin da so gewohnt, wenn ich griechische Zeichen nach groß wandle.

ITLE=`printf "„Χρώματα“" | sed -e "s/_/ /g;s/'/ /g;s/
\+/ /g;s/.*/\U&/"`

printf "$TITLE\n"
„ΧΡΏΜΑΤΑ“

Cool, endlich dieses Gewürgs beim Wandeln in Großbuchstaben von UTF-8
weg. Vielen Dank! Als ich vor langer Zeit mein 1. Script mit dieser
Problemtik erstellte, ergaben meine Recherchen keine bessere Lösung als
mit iconv.


# 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 ;)

Stimmt, die habe ich ja zum Dateinamen hinzugefügt.

Al
--
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