Chinaunix

标题: pyExcelerator的中文编码问题 [打印本页]

作者: harmful_001    时间: 2010-05-30 00:30
标题: pyExcelerator的中文编码问题
直接上代码

  1. #!/usr/bin/env python
  2. #coding=utf8
  3. import os
  4. from pyExcelerator import *


  5. city1 = {
  6.         'bj' : 'beijing',
  7.         'hz' : 'hangzou',
  8.         'gz' : 'guangzhou'
  9. }


  10. city2 = {
  11.         'bj' :'u\'北京\'',
  12.         'hz' :'u\'杭州\'',
  13.         'gz' : 'u\'广州\''
  14. }


  15. w = Workbook()
  16. for file in os.listdir('/home/test/'):
  17.         pla,dat = file.split('_')
  18.         ws1 = w.add_sheet(city1[pla])
  19.         #ws2 = w.add_sheet(city2[pla])

  20. w.save('test.xls')
复制代码
在这里,运行字典city1时,生成的excel文件是没有问题的。

但就是使用中文作为excel分表的名字时,也就是运行city2的时候,执行没有问题,但生成的excel文件打开的时候会有报错,
提示有不可读取的内容。
选择修复的话,打开的工作表都是被重新命名过的,都是Recovered_sheet

虽然说,使用非中文显示也可以,但总有点不爽

尝试了好些方法都没能解决,各位大大是怎么处理的呢?请教
作者: 2gua    时间: 2010-05-30 07:12
为什么就不用VBA操作Excel呢?VBA是官方的首选Office编程语言,而且也很简单啊。
作者: harmful_001    时间: 2010-05-30 09:43
谢谢2gua的回复!
刚才查了一下,VBA的确有他的优势,不过VBA已经是另外一种语言了。vba是否可以作为一个模块融合到python中使用呢?

现在还不想参杂其他,想先把python学好,或者说把pyExcelerator用好。
作者: harmful_001    时间: 2010-05-30 09:49
自己再补充一些

上面的代码,如果以Unicode编码的中文组成一个list来调用,生成的excel是清晰能实现中文编码的
  1. #!/usr/bin/env python
  2. #coding=utf8

  3. import os

  4. from pyExcelerator import *



  5. city1 = {
  6.         'bj' : 'beijing',
  7.         'hz' : 'hangzou',
  8.         'gz' : 'guangzhou'
  9. }


  10. city2 = {
  11.         'bj' :'u\'北京\'',
  12.         'hz' :'u\'杭州\'',
  13.         'gz' : 'u\'广州\''
  14. }


  15. heads = [u'北京',u'杭州',u'广州']


  16. w = Workbook()

  17. for file in os.listdir('/home/test/'):
  18.         pla,dat = file.split('_')
  19.         ws1 = w.add_sheet(city1[pla])
  20.         for q in range(len(heads)):
  21.                ws1.write(0,q,heads[q])

  22.         #ws2 = w.add_sheet(city2[pla])

  23. w.save('test.xls')
复制代码
而使用dict字典却不可以?还是我的字典表达有问题?但尝试了多次,还是不行。
还请教各位大大!
作者: luffy.deng    时间: 2010-05-30 10:47
'u\'北京\''
harmful_001 发表于 2010-05-30 09:49

这是想干嘛?
作者: harmful_001    时间: 2010-05-30 13:28
回复 5# luffy.deng


    呃。。
  想匹配city2[pla]的时候得到的结果为  u'北京'
作者: luffy.deng    时间: 2010-05-30 14:46
回复  luffy.deng


    呃。。
  想匹配city2的时候得到的结果为  u'北京'
harmful_001 发表于 2010-05-30 13:28


为什么要 得到 u'北京'    这样的一个东西?
作者: 2gua    时间: 2010-05-30 15:24
谢谢2gua的回复!
刚才查了一下,VBA的确有他的优势,不过VBA已经是另外一种语言了。vba是否可以作为一个模 ...
harmful_001 发表于 2010-05-30 09:43



    重点不在于VBA能否作为一个模块在Python中使用,如果即使可以,那干脆就用VBA得了。
    重点也不在于VBA是另外一种语言。
    重点在于VBA是官方指定的Office二次编程语言,而且很简单,兼容性好。合适的领域用合适的东西,这个才是重点。
作者: harmful_001    时间: 2010-05-30 15:31
为什么要 得到 u'北京'    这样的一个东西?
luffy.deng 发表于 2010-05-30 14:46



    使得excel的工作表是以中文来命名的
   我暂时知道使用unicode来写入中文,这里有什么问题吗?
作者: luffy.deng    时间: 2010-05-30 15:38
本帖最后由 luffy.deng 于 2010-05-30 15:50 编辑
使得excel的工作表是以中文来命名的
   我暂时知道使用unicode来写入中文,这里有什么问题吗?
harmful_001 发表于 2010-05-30 15:31

'u\'北京\''   这样的东西跟中文命名有什么关系?  你不会认为这样会得到一个unicode字符串吧?另外不用vba的原因是它无法脱离office环境运行,所以才需要ActiveX。
作者: HyryStudio    时间: 2010-05-30 19:59
回复 1# harmful_001
我觉得应该将'u\'北京\''改为 u'北京'

'u\'北京\''还是一个string,不是unicode,根据你的程序头中的编码,它是一个编码为UTF8的string。
作者: harmful_001    时间: 2010-05-30 23:28
谢谢Luffy!

果然还是懒,虽然觉得'u\'北京\'' 这个dict的定义有问题,但就是没有想到去查编码问题。
看到list里面heads = [u'北京',u'杭州',u'广州']可以,我就真以为这样的dict也可以得到一个unicode字符串。
作者: harmful_001    时间: 2010-05-30 23:31
回复 11# HyryStudio


    谢谢!
   后来我也是这样修改的,并用unicode(jflist2[pla],"utf-8")把它转码了。
作者: harmful_001    时间: 2010-05-30 23:33
其实还有点不明白

list里面可以直接定义unicode的字符串,
dict里却不可以?
作者: t6760915    时间: 2010-05-31 10:40
本帖最后由 t6760915 于 2010-05-31 10:42 编辑

我在windows上测试了你的代码
把这一段改一下就可以了,修改成:
  1. city2 = {
  2.         'bj' :u'北京',
  3.         'hz' :u'杭州',
  4.         'gz' :u'广州'
  5. }
复制代码
还是编码的问题
作者: harmful_001    时间: 2010-05-31 21:01
这下糗大了。。。。

的确这样就可以了,最后的问题也解决了。天啊!
记得当时试过这样是不行的,我才使用了转义
RP严重有问题啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2