Python中文
在python中有兩種默認(rèn)的字符串:str和unicode。在Python中一定要注意區(qū)分“Unicode字符串”和"Unicode對(duì)象”的區(qū)別。
后面所有的“Unicode字符串”都是指"Unicode對(duì)象”。
一個(gè)傳統(tǒng)的字符串完全可以用str對(duì)象表示,它僅僅是一個(gè)字節(jié)流,除非解碼為unicode對(duì)象,否則沒(méi)有任何實(shí)際意義。
一開(kāi)始先上例子
>>> s='哈哈' >>> s '\xe5\x93\x88\xe5\x93\x88' >>> type(s) <type 'str'> >>> >>> ss = u'哈哈' >>> ss u'\u54c8\u54c8' >>> type(ss) <type 'unicode'>ss聲明為unicode
>>> u = s.decode('utf8') >>> u u'\u54c8\u54c8' >>> print u 哈哈 >>> >>> u = s.decode('utf-16') >>> >>> u u'\u93e5\ue588\u8893' >>> print u 鏥袓將字符串s(utf8編碼)使用decode進(jìn)行解碼后,可以得到同等得unicode對(duì)象,和直接聲明為unicode的ss一樣
>>> u=ss.decode('utf8') Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/local/sinasrv2/lib/python2.7/encodings/utf_8.py", line 16, in decodereturn codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) >>> u=ss.encode('utf8') >>> u '\xe5\x93\x88\xe5\x93\x88' >>> print u 哈哈可以將unicode對(duì)象編碼encode成其他字符集,不能進(jìn)行解碼decode,decode是針對(duì)utf8、GBK編碼來(lái)說(shuō)的
下面再給一個(gè)例子進(jìn)行說(shuō)明:
1、先聲明一個(gè)unicode對(duì)象
2、將其編碼成gbk
3、直接print出現(xiàn)不顯示
4、使用decode解碼成GBK,正確顯示
>>> ss = u'哈哈' >>> ss u'\u54c8\u54c8' >>> t = ss.encode('gbk') >>> t '\xb9\xfe\xb9\xfe' >>> print t>>> >>> print t.decode('gbk') 哈哈?
序列化unicode對(duì)象
>>> str(ss) Traceback (most recent call last):File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)向文件直接輸出ss會(huì)拋異常。在處理unicode中文字符串的時(shí)候,必須首先對(duì)它調(diào)用encode函數(shù),轉(zhuǎn)換成其他編碼輸出。
?
總結(jié):在Python中,str對(duì)象就是一個(gè)字節(jié)數(shù)組,至于里面的內(nèi)容是不是一個(gè)合法的字符串,以及這個(gè)字符串采用什么編碼都不重要。
這些內(nèi)容需要用戶自己記錄和判斷。這個(gè)限制也同樣適用于unicode對(duì)象。要記住unicode對(duì)象中的內(nèi)容可絕對(duì)不一定就是合法的unicode字符串。
?
【參考鏈接】
1、http://blog.csdn.net/mayflowers/article/details/1568852
轉(zhuǎn)載于:https://www.cnblogs.com/gsblog/p/3860584.html
總結(jié)
- 上一篇: 二本能考部队文职吗
- 下一篇: 中美海军盾舰实力如何?