python… problema de codificação ao usar linux> [duplicado]
Esta pergunta já tem uma resposta aqui:
ntendendo o Python Unicode e o terminal Linux 2 respostasrograma de teste simples de um problema de codificaçã
#!/bin/env python
# -*- coding: utf-8 -*-
print u"Råbjerg" # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'
aqui é o que recebo quando o uso em uma caixa de comando debian, não entendo por que o redirecionamento aqui quebrou a coisa, como posso vê-lo corretamente ao usar se
alguém pode ajudar a entender o que eu perdi? e qual deve ser a maneira correta de imprimir esses caracteres para que eles estejam bem em todos os lugares?
$ 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)
usando o debian Debian GNU / Linux 6.0.7 (squeeze) configurado com:
$ 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: de outras perguntas semelhantes vistas mais adiante a partir do apontamento feito abaixo
#!/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