Python 編碼問題 utf-8 和 unicode

zhjd2010 8年前發布 | 10K 次閱讀 Python開發

來自: 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!