我有以下脚本(test.py),打印非ASCII字符:
# -*- coding: utf-8 -*-
print u"café"
在shell运行时,它按预期工作:
$ python test.py
café
但是,如果我尝试使用>
的常规bash重定向,则会以下列方式失败:
$ python test.py > result.txt
Traceback (most recent call last):
File "test.py", line 2, in <module>
print u"café"
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)
如何解决这个问题?
Python版本,如果它有帮助:
$ python --version
Python 2.6.6
EDIT1 :请注意,此问题与this other不重复。在提到的问题中,他们在Python中使用文件抽象,例如open()
等等,而在我的问题中,这些抽象没有被使用,而且我使用了bash重定向。
EDIT2 :检查bash unicode支持,如评论中所示:
$ bash --version | head -n 1
GNU bash, versión 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ stty -a
speed 38400 baud; rows 35; columns 150; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
$ echo -e '\xe2\x82\xac'
€