我一直在使用python 2.6。我正在编写一个python程序来处理来自sql server的查询结果(以csv格式)。我发现它不支持unicode。
当我使用csv文件运行程序时,出现错误说:
for row in csvReader:
Error: line contains NULL byte
用Ultraedit保存ANSI / ASCII格式的csv文件后,程序运行正常。
我尝试包含编码选项,但失败了:
csvReader = csv.reader(open(fname, mode='rb', encoding='unicode'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function
csvReader = csv.reader(open(fname, mode='rb', encoding='utf-8'), delimiter=',')
TypeError: 'encoding' is an invalid keyword argument for this function
我想知道python 3是否支持这个unicode阅读。它可以为我节省很多工作。
答案 0 :(得分:7)
Python 3绝对支持unicode。我的猜测是,当您打开CSV文件进行读取时,您指定了错误的(或没有?)编码。请参阅:http://docs.python.org/release/3.1.3/library/functions.html#open
尝试类似的事情:
reader = csv.reader(open("foo.csv", encoding="utf-8"))
编辑:如果您使用的是Python 2.6,则可以通过以下方式获得相同的结果:
import codecs
reader = csv.reader(codecs.open("foo.csv", encoding="utf-8"))
HOWEVER 如果您获得空字节,则可以使用"utf-16"
对文件进行编码,因此如果无法使用utf-8解码文件,请尝试使用。
答案 1 :(得分:2)
类似的问题已经回答Python CSV error: line contains NULL byte
此外,尝试以'rb'模式而不是'rU'
打开它