Python 字符串與unicode對象 關於與區別 encode、decode

做者:shede333
主頁:http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847
版權聲明:原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]html


#Python 字符串與unicode對象 關於與區別 encode、decodepython

做者:shede333
主頁:http://my.oschina.net/shede333
版權聲明:原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]數組


結合下面的文章的一點理解:
python 中文亂碼問題深刻分析_python_腳本之家
python的str,unicode對象的encode和decode方法(轉) - 不得閒 - 博客園
python編碼問題_百度文庫ide

##字符串str:
是一個字節數組, 是對unicode對象,編碼encode(utf-8,gbk,GB2312 等等)後的存儲格式,測試

  1. 好比,str=‘哈哈’,文件頭聲明編碼爲UTF-8, 那麼,str裏面真正的內容爲 '\xe5\x93\x88\xe5\x93\x88’ (可用print repr(str)來查看)
  2. 它僅僅是一個字節流,沒有其它的含義,若是你想使這個字節流顯示的內容有意義,就必須用正確的編碼格式;
  3. 經過decode()接口轉變爲u’***’,
  4. 想查看str裏面的具體內容,使用接口print repr(str) ,str裏面存儲的內容與項目文件指定的編碼有關

##unicode對象 u’****’: 是一個unicode對象, 經過encode()接口轉換爲str編碼

注:在pycharm等ide 更改文件頭編碼聲明,會影響文件真正的編碼存儲,可能會影響測試結果url

  1. 我推斷,print str,可否成功,取決於str裏面內容的編碼,與文件頭聲明的編碼是否一致
  2. 聲明一個str=‘測試’, 那麼str裏存儲的具體內容,取決於 文件頭聲明的編碼格式;(見’測試1’與’測試2’的結果區別)
    即程序會保存該漢字在指定編碼裏面字符集的字符;
  3. 因此一樣的str=‘測試’聲明,不一樣的文件頭-編碼,repr(str)會輸出不一樣的內容

##開始測試驗證.net

測試環境 Mac OS 10.9 , Pycharm 3.0.2code

###測試1.htm

#_*_ coding:GBK _*_
print '哈哈'.decode('gbk')
print repr('哈哈’)

輸出:
哈哈
'\xb9\xfe\xb9\xfe’

###測試2.

#_*_ coding:UTF-8 _*_
print '哈哈'.decode('utf-8')
print repr('哈哈’)

輸出:
哈哈
'\xe5\x93\x88\xe5\x93\x88'

###測試3.

文件頭 #_*_ coding:GBK _*_
print repr('哈哈’)
print '哈哈'.decode(‘utf-8')

輸出:
'\xb9\xfe\xb9\xfe’
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: invalid start byte

###測試4.

#_*_ coding:UTF-8 _*_
print repr('哈哈’)
print '哈哈'.decode('gbk')

輸出:
'\xe5\x93\x88\xe5\x93\x88'
鍝堝搱
注:上面輸出了亂碼

相關文章
相關標籤/搜索