' ASCII'当通过Bash将Python脚本重定向到文件时,编解码器无法对字符进行编码

时间:2018-05-22 16:25:12

标签: python unicode

我有以下脚本(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'
€

0 个答案:

没有答案