簡單的測試程序時編碼問題:蟒蛇...使用的編碼問題的Linux>
#!/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)
使用Debian的Debian GNU/Linux的6.0.7(擠)配置有:
$ 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=
編輯:請從下面的
#!/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
好的,謝謝,對不起,它有效地像你指出的帖子,並且在那裏的解釋很有趣。只要使用'import locale,sys;打印sys.stdout.encoding,locale.getpreferredencoding()'可以幫助理解管道行爲tty編碼vs None,當重定向時可以默認爲'ascii'。 – user1340802