Python 从xls到csv文件的列表中出现unicode错误

Python 从xls到csv文件的列表中出现unicode错误,python,csv,unicode,utf-8,xlrd,Python,Csv,Unicode,Utf 8,Xlrd,我正在尝试从页面中刮取一个xls文件并将其保存到csv。我创建了一个处理文件的函数,但是当我尝试写出文件时,我得到了一个编码错误,说它不能处理文件中的一个字符 UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 9: ordinal not in range(128) 我试图使用unicode函数在列表中的每个项目上强制使用utf-8,这似乎对大多数项目都有效,但不知何故,我仍然得到相同的错误

我正在尝试从页面中刮取一个xls文件并将其保存到csv。我创建了一个处理文件的函数,但是当我尝试写出文件时,我得到了一个编码错误,说它不能处理文件中的一个字符

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 9: ordinal not in range(128)
我试图使用unicode函数在列表中的每个项目上强制使用utf-8,这似乎对大多数项目都有效,但不知何故,我仍然得到相同的错误

def csv_from_excel( fileName ):
# open the xls file and save as a csv

wb = xlrd.open_workbook(fileName)
worksheets = wb.sheet_names()
for worksheet_name in worksheets:
    worksheet = wb.sheet_by_name(worksheet_name)
    print worksheet
    csvfile = open(fileName, 'wb')
    wr = csv.writer(csvfile, quoting=csv.QUOTE_ALL)

    for rownum in xrange(worksheet.nrows):
        cleanrow = [unicode(i) for i in worksheet.row_values(rownum)]
        print cleanrow
        wr.writerow(cleanrow)

    csvfile.close()

在Python2中,需要将编码字符串传递给
csv
模块,而不是Unicode值

for rownum in xrange(worksheet.nrows):
    cleanrow = [unicode(i).encode('utf8') for i in worksheet.row_values(rownum)]
    print cleanrow
    wr.writerow(cleanrow)
这会在将所有值传递给writer对象之前将其编码为UTF-8


对对象调用
unicode()
将非unicode值(字节字符串、数字等)转换为
unicode
对象,而不是UTF-8编码字节。只有显式的
.encode()
方法调用才能做到这一点。

Martijn,非常感谢,这太棒了,我已经花了好几个小时研究这个问题了。