作者buganini (霸格尼尼)
看板Python
标题Re: [问题] 中文编码的疑惑..
时间Mon Nov 17 22:55:13 2008
: #-*- coding: utf-8 -*-
: print '科科'.decode('utf8')
: print repr('科科'.decode('utf8'))
: 可是这样到头来绕一圈都是一样的,那何苦多绕一圈
: 就直接用unicode就可以了
补充一下我自己的看法
我之前有个疑惑
coding: utf-8都跟他说档案是utf-8了
为什麽他不自己去把'科科'转码呢
後来想通了
''是可以用来做binary string的
如果他自动转的话 就失去支援binary string的能力了
这样我们要用binary string可能就只能用hex来写了
而且找定义来说 str本来就是encoding independent的
--
个人浅见
--
顺便徵求一下str<->unicode换汤不换药的方法
我的意思是 只换型态 内容不变..
目前是用
def deuni(s):
s=repr(s)[2:-1]
exec 's="%s"' % s
return s
来把unicode型态的东西硬转成str
因为之前写一些程式透过openoffice的uno去连mssql
但uno输入/输出的都是unicode型态的资料
而我那资料库里面的东西都是big5编码
虽然我指定了charset为big5:
dtsrc3=createUnoService('com.sun.star.sdbc.DriverManager')
conn3=dtsrc3.getConnectionWithInfo('sdbc:odbc:mssql',Array(makePropertyValue('Charset',2026),makePropertyValue('user','test'),makePropertyValue('password','test')))
stat3=conn3.createStatement()
但是他送出来的资料还是包装成unicode的big5
(不指定的话就是被转码转烂的无意义资料)
所以我必须这样把他硬转回来
但有时候会有问题
repr()跑出来的东西有时候会有\u0000的型式
就我目前遇到的case只有 \u201a (应该是全形空白的一半吧 忘了是哪一半)
我只在exec之前放了一个s=s.replace('\\u201a','\\x82')
我用的是老旧的openoffice内建的python, 版本忘了...
里面的python甚至连big5的encoding都不支援...
不过因为某些环境限制 我只有这老古董可以用而且不能换...
要送进去的SQL里面有中文的时候也要用u"select * from xxoo where abcd='丁丁是个人才'", 档案要存成big5
这样才能正确match到字串
不然丁丁会被转烂掉...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.126.12