有人成功使用Python的xlwt写出UTF-8字符吗?
我正在尝试将包含日文字符的数据写入一个Excel文件。为了获取数据,我使用了codec.open(),这个方法似乎没问题,但当我尝试写入数据时却遇到了一个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-17: ordinal not in range(128)
我不明白为什么程序在这里一定要使用ascii编码。当我创建一个新的工作簿对象时,我是这样做的:
wb = xlwt.Workbook(encoding='utf-8')
而且程序文件和它读取的文件都是以UTF-8格式保存的。
有没有人有什么想法?
补充:这是xlwt包的链接。 http://pypi.python.org/pypi/xlwt
2 个回答
2
16
在Excel 97-2003的XLS文件中,每段文本会尽量用latin1
编码,如果不行的话就用UTF-16LE
编码,并且会有一个标记来说明使用了哪种编码。为了做到这一点,xlwt需要一个unicode
对象。如果你传入的是str
对象,xlwt会尝试用在Workbook()调用中指定的编码来解码(默认是ascii
)。
这个方法是有效的;你可以试着运行下面这个简短的脚本,然后用Excel打开生成的文件。
import xlwt
wb = xlwt.Workbook(encoding="UTF-8")
uc = u"".join(unichr(0x0410 + i) for i in xrange(32)) # some Cyrillic characters
u8 = uc.encode("UTF-8")
ws = wb.add_sheet("demo")
ws.write(0, 0, uc)
ws.write(1, 0, u8)
ws.write(2, 0, xlwt.Formula("A1=A2"))
ws.write(3, 0, "ASCII is a subset of UTF-8")
wb.save("xlwt_write_utf8.xls")
如果你遇到了编码错误,而不是解码错误,这可能说明你的脚本在读取文件的部分有问题。请提供一个尽可能简短的脚本,这个脚本会导致你遇到的错误。脚本中应该包含类似print repr(your_utf8_text)
的内容,放在出错的语句之前,这样我们就能准确看到文本数据是什么。请把完整的错误信息和完整的追踪信息,以及你那个非常简短的输入文件的内容(print repr(contents)
)一起提供上来。