带有make的Vim中奇怪的python编码错误

时间:2014-03-16 20:25:25

标签: python vim encoding makefile

我的文件test.py包含内容:

print u'\u0410'

Makefile

test:
    python test.py

当我在Vim :!python test.py写作时,我得到了

А

Press ENTER or type command to continue

但是当我写:make test时,我得到了

python test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    print u'\u0410'
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0410' in position 0: ordinal not in range(128)
make: *** [test] Error 1

Press ENTER or type command to continue
终端中的

make test没问题。

任何人都有任何想法为什么会如此?你可以重现吗?或者只是我的设置?

1 个答案:

答案 0 :(得分:0)

变化:

print u'\u0410'

为:

print u'\u0410'.encode('utf-8')

这里发生的事情是vim在2>&1 | tee之后添加了shellpipe(来自make设置)(从makeprg设置中设置)。因此,您的test.py脚本实际上已被重定向。尝试运行$ test.py > /tmp/foo,您将收到相同的错误。解决方案:将输出编码为合理的编码,例如utf-8