Python 編碼問題 utf-8 和 unicode
來自: http://blog.csdn.net//never_cxb/article/details/49967143
前言:utf-8 和 unicode
UTF-8,1個漢字占3個字節,擴展B區以后的漢字占4個字節。
GBK,1個漢字占2個字節。
UTF-16,通常漢字占兩個字節。
Unicode,一個英文等于兩個字節,一個中文(含繁體)等于兩個字節,范圍是 \u4e00-\u9fa5。
UTF-8是Unicode的一個實現?
記得java虛擬機存儲代碼都是用unicode的,不涉及具體編碼格式,只有在讀入讀出邊界處會用具體編碼格式來處理。
命令行模式下
>>> u'\u597d\u73a9' u'\u597d\u73a9' >>> print u'\u597d\u73a9' 好玩
好玩的 unicode 是 \u597d\u73a9
IDE模式下
# -- coding: UTF-8 --
s = "好玩"
print s
print s.decode("utf-8").encode("utf-8")
print unicode(s,"utf-8")
print len(s)
print len(s.decode("utf-8").encode("utf-8"))
print len(unicode(s,"utf-8"))</pre>
輸出
好玩
好玩
好玩
6
6
2
utf-8每個漢字占3個字節,所以“好玩”輸出了6
一個漢字表示為一個unicode,所以這兒的len表示的是有幾個unicode,所以輸出了2
“好玩”的unicode為\u597d\u73a9
us = u'\u597d\u73a9'
print us
print us.encode("utf-8")
print len(us)
print len(us.encode("utf-8"))</pre>
輸出
好玩
好玩
2
6
疑惑
us = u'\u597d\u73a9'
print us
這兒會輸出漢字好玩
我不知道在IDE里面如何輸出u'\u597d\u73a9',在命令行里面倒是可以。
輸出的時候會轉化為IDE控制臺使用的編碼格式,所以會輸出漢字?
后來找到了解決方法,利用python自帶的repr函數
us = u'\u597d\u73a9'
print repr(us)
print repr(us.encode("utf-8"))
輸出
u'\u597d\u73a9'
'\xe5\xa5\xbd\xe7\x8e\xa9'
可以看出utf-8表示漢字確實用了3個字節。
</div>
本文由用戶 zhjd2010 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!