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@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org