xlwt 数据乱码
我从数据库里获取中文字符的数据,然后用xlwt把这些数据写入Excel,
代码如下:
ws0.write(0,0, unicode(cell, 'big5'))
在Windows系统下运行没问题,但当我在Linux系统上运行时,Excel里的数据就变得乱码了,
你能帮我解决这个问题吗?
1 个回答
你最好把你实际运行的代码发出来。假设 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问题的常用论坛……这样如果需要,你可以轻松地给我发送文件查看,而我也能在有新帖子时收到邮件,而不是要定期去网站查看……