Python… Codierungsproblem bei Verwendung von Linux> [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Python Unicode und Linux Terminal verstehen 2 Antworten

einfaches Testprogramm für ein Codierungsproblem:

#!/bin/env python
# -*- coding: utf-8 -*-
print u"Råbjerg"      # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'

hier bekomme ich was, wenn ich es aus einer debian-befehlsbox verwende, ich verstehe nicht, warum die verwendung von redirect hier das ding kaputt gemacht hat, da ich es richtig sehen kann, wenn ich es ohne verwende.

kann jemand helfen zu verstehen, was ich vermisst habe? und wie sollen diese zeichen richtig gedruckt werden, damit sie überall in ordnung sind?

$ python testu.py
Råbjerg

$ python testu.py > A
Traceback (most recent call last):
  File "testu.py", line 3, in <module>
    print u"Råbjerg"
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 1: ordinal not in range(128)

unter Verwendung von Debian Debian GNU / Linux 6.0.7 (squeeze) konfiguriert mit:

$ locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

EDIT: aus anderen ähnlichen Fragen, die später aus dem unten ausgeführten Hinweis hervorgehen.

#!/bin/env python1
# -*- coding: utf-8 -*-
import sys, locale
s = u"Råbjerg"      # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'
if sys.stdout.encoding is None: # if it is a pipe, seems python2 return None
    s = s.encode(locale.getpreferredencoding())
print s

Antworten auf die Frage(3)

Ihre Antwort auf die Frage