传递给其他命令时编码更改?

时间:2012-06-16 07:21:18

标签: python encoding character-encoding

我有一个文件,我从test读取。该文件是UTF-8。在我的简单例子中,它只包含丹麦语字母“Ø”。

然后我有一个Python脚本,它读取这个文件,在这个例子中,只打印每一行。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs
import sys

filename = sys.argv[1]

f = codecs.open(filename, 'r', 'utf-8')

for lines in f:
  print lines

拨打此parse.py。现在,当我在终端中运行./parse.py test时,我得到以下输出:

Ø

代替./parse.py test | less致电给我:

Traceback (most recent call last):
  File "./test.py", line 12, in <module>
    print lines
UnicodeEncodeError: 'ascii' codec can't encode character u'\xd8' in position 11: ordinal not in range(128)

我确定我的test文件是'UTF-8':

$ file -I test
test: text/plain; charset=utf-8

我的$LC_TYPE是'UTF-8'

我做错了什么?如何让它工作,以便我可以将parse.py的输出传递给下一个命令?

1 个答案:

答案 0 :(得分:1)

这可能是一个问题,请参阅this article了解一些提示。也许改变less的配置会有所帮助。

  

如果您的系统支持非ASCII文本的Unicode的UTF-8编码,就像许多现代系统一样,您应该将您的语言环境设置为包含字符串“UTF-8”或“UTF8”(大写字母)的内容或者小写是好的),或者将LESSCHARSET设置为“utf-8”。

好的,这不是问题......所以根据评论更新答案。 需要在打印前对字符串进行编码。 This article给出了理由,总结起来:需要告诉python如何编码unicode。