關於python中的unicode字符串的使用


基於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


python對unicode的支持:

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異常編碼或者解碼異常,









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM