该
.enpre方法将应用于
Unipre字符串以生成字节字符串。但是你是用字节字符串来调用它的…以错误的方式回合!查看
precs标准库中的模块,
precs.open尤其是阅读UTF-8编码文本文件的更好的通用解决方案。但是,对于csv特定的模块,你需要传递utf-8数据,而这正是你已经得到的,因此你的代码可以更加简单:
import csvdef unipre_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unipre(cell, 'utf-8') for cell in row]filename = 'da.csv'reader = unipre_csv_reader(open(filename))for field1, field2, field3 in reader: print field1, field2, field3
PS:如果事实证明你的输入数据不在
utf-8中,而是在
ISO-8859-1中,那么你确实需要“转码”(如果你热衷于在
csv模块级别使用
utf-8) ,形式为
line.depre('whateverweirdprec').enpre('utf-8'),但你可能只需要在yield上面的代码行中使用现有编码的名称即可,而不是’utf-8’,因为csvISO-8859- *编码的字节串实际上就可以了。



