«

»

Jul 11 2009

LANG=C bricht Unicode

Python 3 ist dafür bekannt, Unicode besonders einfach zu unterstützen. Wenn es trotzdem zu einer UnicodeDecodeException kommt, muss das gar nicht mal am Quelltext liegen.

Heute habe ich die ganze Zeit versucht, ein Programm mit Unicode-Eingabe zu starten. Jedes mal las ich:

File "/usr/lib/python3.0/io.py", line 1494, in write
b = encoder.encode(s)
File "/usr/lib/python3.0/encodings/ascii.py", line 22, in encode
return codecs.ascii_encode(input, self.errors)[0]
<strong>UnicodeEncodeError:</strong> 'ascii' codec can't encode character '\xf6' in position 40: ordinal not in range(128)

Nun, offensichtlich wollte mein Programm also ASCII ausgeben. Warum zur Hölle will es denn den ASCII-Coder nutzen? Ich benutze doch UTF.8-kodierte Strings! Kein Wunder, dass das nicht klappt…

Lösung: Das Programm wurde mit

LANG=C

gestartet. Damit wurde eine ANSI-Console aktiviert.

LANG="en_US.utf8"

tut es auch und verhindert solche blöden Fehler. MAN!


Über den Autor

Benjamin Marwell

Hallo, mein Name ist Benjamin und ich bin Wirtschaftsinformatiker. In meiner Freizeit bin ich Musiker, Ruderer und enthusiastischer Android- und Linux-Nutzer. Meine Interessen liegen daher vor allem im Bereich Open Source-Software, aber auch im Bereich Webentwicklung.

Permanentlink zu diesem Beitrag: http://blog.bmarwell.de/langc-bricht-unicode/

2 Kommentare

  1. David

    Die Umgebungsvariable LANG setzt die Sprache des gesamten Systemes. Falls du einzelne Programme in einer C oder Posix Umgebung starten willst empfehle ich ein Programm wie folgt zu starten.

    LANG=de_DE.UTF-8 date

    oder

    LANG=C date

    Könnte Interessant sein wenn du darauf angewiesen bist ein Programm unter einer speziellen Umgebung starten zu wollen.

    1. Ben

      Aber genau das war mein Problem:
      “LANG=C date” schaltet auf eine ANSI-Console, wo nur ASCII-Zeichen zu Verfügung stehen. Die Ausgabe von nicht-ASCII-Zeichen brachte dann diese Exception.
      “LANG=*.UTF-8 date” schaltet hingegen nicht auf eine ANSII-Console um. Daher war das die Lösung.

      Damit wollte ich also den Irrglauben auslöschen, dass C einfach nur die Sprache umschaltet, was viele denken.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Sie können diese HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>