基於python2.7中的字符串:
unicode——》編碼encode('utf-8')——》寫入文件
讀出文件——》解碼decode('utf-8')——》unicode
在使用unicode的時候,必須注意以下的原則:
1、 程序中出現字符串的地方加前綴u,表示為unicode類型
2、不要使用str函數,在使用的時候使用unicode函數
3、不要使用string模塊
4、只有在寫入文件或者數據庫或者網絡的時候,才使用encode函數來進行編碼發送;只有在把數據讀取回來的時候,才使用decode進行解碼
在使用讀寫unicode數據庫的時候,注意幾個方面:
1、數據庫服務器,例如mysql,只要每個表使用utf-8格式來進行編碼即可
2、數據庫適配器,例如mysqldb,在connect()方法中使用use_unicode方法
3、web開發框架,例如django,進行更多的設置
#!/usr/bin/env python #-*- coding:utf-8 -*- #聲明為unicode編碼文件,否則會報錯 CODEC = 'utf-8' FILE = 'unicode.txt' hello_out = u'Hello KEL,中文測試\n' bytes_out = hello_out.encode('utf-8') #在寫入文件的時候進行編碼為utf-8,從而保存在文件中的編碼為utf-8 f = open(FILE,'w') f.write(bytes_out) f.close() f = open(FILE,'r') hello_in = f.read() bytes_in = hello_in.decode(CODEC)#讀出文件的時候,進行解碼,從utf-8進行解碼,解碼為unicode類型 f.close() print bytes_in,以上的程序為當寫入文件的時候,必須進行編碼,從而在文件中保存為正確的編碼格式;在讀出文件的時候,進行適當的解碼,從而轉換為unicode編碼來進行處理。
在進行使用unicode編碼的時候,必須聲明此文件使用的編碼類型,否則會報錯,報錯內容如下:
[root@python 48]# python uniFile.py File "uniFile.py", line 6 SyntaxError: Non-ASCII character '\xe4' in file uniFile.py on line 6,
but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
1、內建的unicode函數,用來生成unicode函數——通過一個字節串和編碼方法顯式的創建一個unicode字符串,通常不指定編碼方式的字節串是沒有任何意義的。
>>> kel = unicode('kel','utf-8') >>> print kel kel >>> kel u'kel'2、內建的decode方法和encode方法,一個是進行編碼,一個是進行解碼
3、unicode字符串對象是basestring的子類,使用u或者U來創建實例,在支持原始字符串的時候,可以使用ur或者UR,u必須寫在r的前面
>>> kel = ur'this is 漢字' >>> kel = ru'this is 漢字' File "<stdin>", line 1 kel = ru'this is 漢字' ^ SyntaxError: invalid syntax
4、 在對象中,如果一個對象包含一個__unicode__()方法,那么可以將一個對象轉換為unicode對象
>>> kel = '漢字' >>> kel '\xe6\xb1\x89\xe5\xad\x97' >>> kel.encode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)在進行編碼解碼的時候,默認是使用ascii編碼來進行解碼,如果出現以上錯誤,或者是UnicodeEncodeError,那么均表示為在進行編碼或解碼的時候不正確,沒有正確的創建一個unicode對象。
1、 無論何時,當你的程序接收到來自網絡或者文件或者用戶輸入等的時候,應當立即創造一個unicode對象,找出最合適的編碼,使用decode來進行創建unicode對象。
2、無論何時,當你的程序要發送文本數據到網絡或者寫入文件或者輸出等的時候,應該探查正確的編碼,並用呢種編碼將你的文本轉變為字節串,使用encode方法來進行發送數據
創建一個unicode字符串:
>>> kel = unicode('中文string','utf-8') >>> print kel 中文string將unicode轉變為python字符串:
>>> kel = unicode('中文string','utf-8') >>> print kel.encode('utf-8')將python字符串轉變為unicode:
>>> kel = unicode('中文string','utf-8').encode('utf-8').decode('utf-8') >>> print kel 中文string
將unicode對象轉變為字節串,稱之為對該字符串進行編碼;
從基於字節的對象中載入一個unicode字符串,必須對齊進行解碼,將從字節串轉換為字符,也就是unicode對象
當處理字節串和unicode編碼的時候:
會將字節串轉換成unicode編碼,在隱式的情況下,並且假設字節串為ascii編碼,如果包含非ascii編碼,那么將會有unicodedecodeerror的異常發生。
在默認進行轉換的時候,都是使用ascii編碼進行轉換。——從而在每次報錯的時候,都是ascii異常編碼或者解碼異常,