2

我正在尝试阅读一些法语文本并对单词进行一些频率分析。我希望保留带有变音符号和其他变音符号的字符。所以,我这样做是为了测试:

>>> import codecs
>>> f = codecs.open('file','r','utf-8')
>>> for line in f:
...     print line
...

Faites savoir à votre famille que vous êtes en sécurité.

到目前为止,一切都很好。但是,我有一个法语文件列表,我通过以下方式对其进行迭代:

import codecs,sys,os

path = sys.argv[1]
for f in os.listdir(path):
    french = codecs.open(os.path.join(path,f),'r','utf-8')
    for line in french:
        print line

在这里,它给出了以下错误:

rdholaki74: python TestingCodecs.py ../frenchResources | more
Traceback (most recent call last):
  File "TestingCodecs.py", line 7, in <module>
    print line
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 14: ordinal not in range(128)

为什么同一个文件在作为参数传递而不是在代码中明确给出时会引发错误?

谢谢。

4

2 回答 2

2

因为你误解了原因。您正在管道输出的事实意味着 Python 无法检测到要使用的编码。如果stdout不是TTY,那么您需要在输出之前手动编码为 UTF-8。

于 2012-10-20T00:26:16.197 回答
2

这是由于重定向导致的打印错误。你可以使用:

PYTHONIOENCODING=utf-8 python ... | ...

如果您的终端不使用 utf-8,请指定另一种编码

于 2012-10-20T00:29:10.817 回答