6

我正在尝试将数据写入包含日文字符的 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

4

2 回答 2

16

latin1在 Excel 97-2003 XLS 文件中,如果可能,每段文本都被编码,否则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)非常短的输入文件的内容 ( )。

于 2011-09-01T03:39:14.597 回答
2

正如这个问题所建议的,在 WorkBook 上设置编码

wb = xlwt.Workbook(encoding='latin-1') 

也应该解决这个问题(它对我有用)。

于 2013-08-01T14:47:27.970 回答