from:
結合二位的答覆,執行結果如下:
>>> a='中國'
>>> b=unicode(a, 'cp936')
>>> b
u'u4e2du56fd'
>>> c = b.encode('utf-8')
>>> c
'xe4xb8xadxe5x9bxbd'
>>> d = b.encode('cp936')
>>> d
'xd6xd0xb9xfa'
加上unihan的資料庫,得知b包含的實際上是那個decimal值,等同於utf-16編碼,c包含的是utf-8編碼,d包含的就是gb2312編碼了。關於unicode在python內部的表示(即用unicode()函式轉換的結果),就是那個唯一的decimal值,等同於utf-16。當然,utf和unicode並不是同樣的事物,後者是前者的變換格式。我的理解對嗎?
另外,"cp936"能夠用於linux系統嗎?
還有乙個問題請教一下:
python的unicode()函式和字串物件的encode()方法能否介紹一下?主要是它們的作用以及能夠接受的encoding。
真的是非常感謝了。澄清了乙個重要概念。
p.s 《無廢話xml》中有一章專門介紹unicode。它裡面就把utf-8, utf-16, unicode的關係說得很清楚了。對照這片帖子二位的解說,我想大家都會像我一樣,學到不少東西的。
*************************
又試了一下,對於unicode()函式,
主要用到兩個引數:原字串,編碼
比如『'中'字的utf-8編碼是:xe4xb8xad,
這時,unicode('xe4xb8xad', 'utf-8')的結果就是'中'字的unicode,為:u'u4e2d'.
即引數中的'utf-8'用來指出前面那個串的編碼是什麼。而unicode()的作用就是按照這個編碼來解釋第乙個引數,並且返回它的unicode形式。
但是對於u"***"的形式還未理解,對於str.encode()也沒有理解……
*************************====
你說的內部的unicode編碼是使用utf-16應該是對的。
我一般將乙個字串轉為unicode都使用unicode(str, encoding)
而將乙個unicode轉為其它的編碼使用unistr.encode(encoding)
u"***"是python中用來表示字元的內部編碼的一種表示方法。
在linux下沒有cp936的使用。這一點在我的blog上有說明:
因此要使用要不自已搞乙個gbk的編碼模組,要不使用cjk模組。
******************************==
code:
#coding:utf-8
#指定本檔案編碼為utf8
import os
# 以下為示例**,不一定能執行。隨意寫的,無編譯執行過。
# 例子以xp平台為例,因為linux平台編碼(utf-8)與window平台(gbk)不一樣。
# 假設d盤下面有很多中文名稱檔案
filelist = os.listdir(r"d:\") # 此處返回的list中的中文是以gbk編碼的,你可以通過檢視cmd視窗屬性看到。
for path in filelist:
if os.path.isdir(path): continue
fp = open(path.decode("gbk") , 'rb') # 如果此處用 path.decode("utf-8") 就會拋異常,原因是wind的dir命令返回的是gbk編碼
print len(fp.read())
fp.close()
filepath =r"d:\中文檔案.doc" # 假設此文存在,記得要帶中文
fp = open(filepath.decode('utf-8'), "rb") #這裡使用utf8引數進行解碼,原因是檔案頭里有句coding: utf-8
print len(fp.read())
fp.close()
path2 = u"d:\中文檔案.doc" # 假如這裡有個u在前面,這個變數就是unicode編碼了,不用解碼。
fp = open(path2, 'rb')
print len(fp.read())
fp.close()
Python字元編碼理解
長久以來,一直對編碼有所不理解,現在梳理一下。首先要明白幾個概念 字元,字符集,字元編碼 什麼是字元呢?很簡單,比如乙個漢字就是乙個字元,乙個 你 就是乙個字元 而同樣的,對於英語來說,a 是乙個字元 3 也是乙個字元。不同的語言,不同的表示方式,都是乙個字元。那麼是什麼是字符集呢?字符集就是,很多...
python編碼問題的理解與解決
錯誤 ascii codec can t encode characters in position 0 1 ordinal not in range 128 看到網上很多都不清楚,做了一天的實驗,終於搞清楚這些原理 如果有錯誤請指出,謝謝,希望不要一開口就噴。總結 理解3個概念,編碼型別,即pyt...
深入理解python字元編碼
整理python在檔案讀取時報錯和cpu執行時字串報錯unicodeencodeerror unicodedecodeerror 解釋py2和py3字串資料型別,和bytes和unicode在py2和py3中的不同表現形式。1.編碼和解碼 2.python 2中的字元編碼 3.python 3中的字...