python編碼的理解

來源:互聯網
上載者:User
from:http://www.unixresources.net/linux/clf/python/archive/00/00/42/73/427317.html

結合二位的回覆,運行結果如下:
>>> 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"xxx"的形式還未理解,對於str.encode()也沒有理解……
=============================
你說的內部的unicode編碼是使用utf-16應該是對的。

我一般將一個字串轉為unicode都使用unicode(str, encoding)
而將一個unicode轉為其它的編碼使用unistr.encode(encoding)

u"xxx"是python中用來表示字元的內部編碼的一種表示方法。

在linux下沒有cp936的使用。這一點在我的blog上有說明:http://www.donews.net/limodou/archive/2004/08/13/67432.aspx

因此要使用要不自已搞一個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()
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.