我有一个csv文件保存编码为UTF-8。
它包含非ascii chars [umlauts]。
我正在使用以下方式阅读该文件:
csv.DictReader(<file>,delimiter=<delimiter>).
我的问题是:
我注意到为了将字符串称为utf-8,我需要执行:
str.decode('utf-8')
是否有更好的方法,然后在一个编码中读取文件,然后转换为另一个,即utf-8
?
[Python版本:2.7]
答案 0 :(得分:2)
在Python 2.7中,CSV模块不应用任何解码 - 它以二进制模式打开文件并返回字节字符串。
使用https://github.com/jdunck/python-unicodecsv,即时解码。
使用它像:
with open("myfile.csv", 'rb') as my_file:
r = unicodecsv.DictReader(my_file, encoding='utf-8')
r
将包含Unicodes的字典。源文件以binary
模式打开非常重要。
答案 1 :(得分:1)
如何使用实例和类来实现这一目标?
您可以在类级别存储共享字典,并使其加载Unicode文本文件,甚至可以检测其编码,无论是否使用BOM文件掩码。
很久以前我写了一个简单的库,用一个支持Unicode的默认值覆盖了默认的open()
。
如果你import tendo.unicode
,你将能够改变csv库加载文件的方式。
如果您的文件没有BOM表头,则库将采用UTF-8而不是旧的ascii
。如果需要,您甚至可以指定其他后备编码。