xlwt 数据乱码

0 投票
1 回答
936 浏览
提问于 2025-04-15 21:59

我从数据库里获取中文字符的数据,然后用xlwt把这些数据写入Excel,
代码如下:

ws0.write(0,0, unicode(cell, 'big5'))

在Windows系统下运行没问题,但当我在Linux系统上运行时,Excel里的数据就变得乱码了,
你能帮我解决这个问题吗?

1 个回答

0

你最好把你实际运行的代码发出来。假设 ws0 是一个 Worksheet 对象,正确的写法是 ws0.write(row_index, column_index, unicode_text)

这里的 cell 是指什么?你是从哪个数据库提取的它?

“Excel里的数据乱码”是什么意思?你在Linux上用什么软件查看XLS文件的内容?你在屏幕上实际看到的是什么?你能在Linux上用其他软件正确显示中文字符吗?

试着在Linux的Python交互提示符下输入这个:

>>> import xlwt
>>> b = xlwt.Workbook()
>>> s = b.add_sheet('zh')
>>> big5_text = '\xa7A\xa6n\xa1I'
>>> u_text = big5_text.decode('big5')
>>> s.write(0, 0, u_text)
>>> b.save('nihao.xls')

然后试着用OpenOffice Calc打开XLS文件……你看到了什么?

更新

(1) “你运行的代码”应该不止一行,请把它展示出来。

(2) 请运行我给你的那段小代码,并告诉我结果。如果能成功,我们可以集中讨论你是如何从哪个数据库获取数据的[请也回答这个问题]。

(3) 请回答关于在Linux下显示中文的问题。

(4) 如果你看到“???”而不是中文(或其他)字符,通常是因为 unicode_text.encode('some_encoding', 'replace')(或其他类似的代码)使用了不合适的编码(比如说,'ascii')——可能之前还有类似的 decode。xlwt会用 unicode_text.encode() 来存储你的unicode字符串,它会根据需要使用'latin1'或'utf_16le'作为编码,第二个参数用的是'strict'而不是'replace'。如果Excel显示“???”,很可能是数据在传给xlwt之前就已经乱码了。你用 print repr(cell) 可以看到什么?

(5) 如果你在Linux和Windows上使用相同版本的xlwt和Python,输入相同的数据和Python脚本,输出的文件应该是逐字节相同的。xlwt和Python版本的差异不太可能导致文件不同。请使用二进制比较(比如在Windows的“命令提示符”窗口中用 fc /b ...)来比较我给你的短脚本生成的文件。请说明你在每个环境中使用的Python和xlwt的版本。

(6) 请考虑转到xlwt问题的常用论坛……这样如果需要,你可以轻松地给我发送文件查看,而我也能在有新帖子时收到邮件,而不是要定期去网站查看……

撰写回答