python使用linux时的编码问题>;

python使用linux时的编码问题>;,python,encoding,utf-8,Python,Encoding,Utf 8,编码问题的简单测试程序: #!/bin/env python # -*- coding: utf-8 -*- print u"Råbjerg" # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE' 这是我在debian命令框中使用它时得到的结果,我不明白为什么在这里使用重定向会破坏它,因为我可以正确地看到它在不使用时的表现 有人能帮我理解我错过了什么吗?那么,正确的打印方式应该是什

编码问题的简单测试程序:

#!/bin/env python
# -*- coding: utf-8 -*-
print u"Råbjerg"      # >>> unicodedata.name(u"å") = 'LATIN SMALL LETTER A WITH RING ABOVE'
这是我在debian命令框中使用它时得到的结果,我不明白为什么在这里使用重定向会破坏它,因为我可以正确地看到它在不使用时的表现

有人能帮我理解我错过了什么吗?那么,正确的打印方式应该是什么,这样字符在任何地方都可以打印

$ 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)
编辑:其他类似问题见下文所述

#!/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
使用:
print u“Råbjerg”。编码('utf-8')


今天也有人问了类似的问题:

我建议您将已编码的文件输出:

print u"Råbjerg".encode('utf-8')

这将在utf-8中写入字符串的正确字节,您将能够在几乎所有支持
utf-8

的编辑器/控制台中看到重定向输出时,
sys.stdout
未连接到终端,Python无法确定输出编码。当不定向输出时,Python可以检测到
sys.stdout
是一个TTY,并在打印unicode时使用为该TTY配置的编解码器


设置以告诉Python在这种情况下使用什么编码,或者显式编码。

好的,谢谢,抱歉,这与您所指的帖子非常相似,这里的解释很有趣。仅适用于任何使用
import locale,sys;print sys.stdout.encoding,locale.getpreferredencoding()
有助于理解管道行为tty编码与重定向时默认为
ascii
print u"Råbjerg".encode('utf-8')