我有一个文件,我从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
的输出传递给下一个命令?
答案 0 :(得分:1)
这可能是一个问题,请参阅this article了解一些提示。也许改变less的配置会有所帮助。
如果您的系统支持非ASCII文本的Unicode的UTF-8编码,就像许多现代系统一样,您应该将您的语言环境设置为包含字符串“UTF-8”或“UTF8”(大写字母)的内容或者小写是好的),或者将LESSCHARSET设置为“utf-8”。
好的,这不是问题......所以根据评论更新答案。 需要在打印前对字符串进行编码。 This article给出了理由,总结起来:需要告诉python如何编码unicode。