python編碼的理解

2021-09-08 07:40:30 字數 2225 閱讀 3254

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中的字...