2

我有一个文件,我从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给下一个命令?

4

1 回答 1

1

这可能是less的问题,请参阅本文以获取一些提示。也许更改 less 的配置会有所帮助。

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

好的,这不是问题......所以根据评论更新答案。需要在打印之前对字符串进行编码。这篇文章给出了原因,总结:需要告诉python如何编码unicode。

于 2012-06-16T07:26:11.380 回答