介绍一:
首先,我们要了解,哪些字符是utf8!
从严格意义上讲,所有字符均为utf8编码,包括中文、英文、符号!
注意,英文也是utf8编码的!!
如下面这些都是utf8编码的:
'a' , 'abc' , '_编程_' , '2008'
'beijing2008'
但是,有时候我们需要通用编码:unicode!
unicode是国际常用通用编码!
要将上面那些转为unicode编码,只需在字符串后加个.decode('utf8')
意思是将字符串原为utf8,反编为unicode
如
'abc'.decode('utf8')
意思是将'abc'从utf8编码转为unicode编码!
需要说明的是:
英文和数字型字符串能够强制从任意编码转为unicode,因此可写成u'abc',这样就代表了unicode码!因为英文的任意编码是相同的!
其次,要了解混合编码的问题:
如:
'abc'+u'abc'
这是由utf8编码加上unicode编码!
结果从严格意义上讲是unicode编码!但有些函数传递字符串时会强制转化。
最后!
那什么时候用utf8,什么时候用unicode?
没有明确说法,要看函数、模块是要什么编码的!
以下是常用要utf8编码的:
open()打开文件
os模块下的大多数函数
解释:
open('d:\\测试.txt','w')是正确的
open('d:\\测试.txt'.decode('utf8'),'w')就会异常
os模块下有一些也是要传递变量的,如
os.path.isfile(路径)判断路径是否为文件。这里的路径也要utf8的。
用unicode编码的,最常用的是appuifw模块!
如
appuifw.app.menu菜单
appuifw.app.title标题
appuifw.Text()文本窗口
好了,看个例子:
import powlite_fm
path=powlite_fm.manager().AskUser()
path=path.encode('utf8')
file=open(path)
get=file.read()
file.close()
注意:path=path.encode('utf8')这句是将path从unicode编译成utf8编码!
powlite_fm模块的返回值(path)是unicode编码的!
但是,后面的open却需要utf8编码的,因此需要将path从unicode编译成utf8编码!
这就是所谓的不支持中文路径的原因!
介绍二:
中文是utf8编码的,要显示出中文,在文本窗口和提示框都是用unicode编码,就要将utf8转化为unicode,因此,要显示中文“你好”,就得用decode('utf8')
print u'hello'
print '你好'.decode('utf8')
import appuifw
appuifw.note(u'hello')
appuifw.note('你好'.decode('utf8'))
例:将“你好China2008”以u码保存在d:\a.txt:
不知为何,别人说u码是unicode码,而python里不能以unicode保存,而用utf16保存却是u码。具体原因不知,知道的说下!
txt='你好China2008'.decode('utf8').encode('UTF-16')
file=open('d:\\a.txt','w')
file.write(txt)
file.close()
例:将“China2008”以A码保存在d:\a.txt:
不知为何,A码不能保存中文,知道方法的说下!
txt='China2008'.decode('utf8').encode('ascii')
file=open('d:\\a.txt','w')
file.write(txt)
file.close()