日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python編碼對解決疑難問題的具體方法

初學(xué)Python編碼的相關(guān)人員經(jīng)常會(huì)遇到很多的編碼問題,常常會(huì)遇到很多的不解的編碼問題,即使記下因?yàn)榉爆崳矔?huì)忘記,以下介紹的是如何避免相關(guān)的情況。是我們在計(jì)算機(jī)的相關(guān)的應(yīng)用中變得更為流暢。

創(chuàng)新互聯(lián)于2013年開始,先為古丈等服務(wù)建站,古丈等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為古丈企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

UNICODE:

使用2個(gè)甚至4個(gè)字節(jié)來編碼一個(gè)字符,因此可以將世界上所有的字符進(jìn)行統(tǒng)一.

Python:

標(biāo)準(zhǔn)的Python編碼只使用7個(gè)比特來表示一個(gè)字符,因此最多編碼128個(gè)字符。擴(kuò)充的 ANSCII 使用8個(gè)比特來表示一個(gè)字符,最多也只能編碼 256 個(gè)字符。

UNICODE:

使用2個(gè)甚至4個(gè)字節(jié)來編碼一個(gè)字符,因此可以將世界上所有的字符進(jìn)行統(tǒng)一編碼。

UTF:

UNICODE編碼轉(zhuǎn)換格式,就是用來指導(dǎo)如何將 unicode 編碼成適合文件存儲(chǔ)和網(wǎng)絡(luò)傳輸?shù)淖止?jié)序列的形式 (unicode -> str)。像其他的一些編碼方式 gb2312, gb18030, big5 和 UTF 的作用是一樣的,只是編碼方式不同。

這里面是這么幾句:

 
 
  1. "The items of a string are characters", "The items of a Unicode 
    object are Unicode code units", "The string data type is also 
    used to represent arrays of bytes, e.g., to hold data read from a file."  

一二句說明 str 和 unicode 的組成單元(item)是什么(因?yàn)樗鼈兺?sequence ) 。sequence 默認(rèn)的 __len__ 函數(shù)的返回值正是該序列組成單元的個(gè)數(shù)。這樣的話,len('abcd') == 4 和 len(u'我是中文') == 4 就很容易理解了。

第三句告訴我們像從文件輸入輸出的時(shí)候是用 str 來表示數(shù)據(jù)的數(shù)組。不止是文件操作,我想在網(wǎng)絡(luò)傳輸?shù)臅r(shí)候應(yīng)該也是這樣的。這就是為什么一個(gè)unicode 字符串在寫入文件或者在網(wǎng)絡(luò)上傳輸?shù)臅r(shí)候要進(jìn)行Python編碼的原因了。#t#

Python 編碼和解碼也就是 unicode 和 str 這兩種v形式的相互轉(zhuǎn)化。編碼是 unicode -> str,相反的,解碼就是 str -> unicode。下面剩下的問題就是確定何時(shí)需要進(jìn)行編碼或者解碼了,像一些庫是 unicode 版的,這樣我們在將這些庫函數(shù)的返回值進(jìn)行傳輸或者寫入文件的時(shí)候就要考慮將它編碼成合適的類型。

關(guān)于文件開頭的"Python編碼v指示",也就是 # -*- coding: -*- 這個(gè)語句。Python 默認(rèn)腳本文件都是 ANSCII 編碼的,當(dāng)文件中有非 ANSCII 編碼范圍內(nèi)的字符的時(shí)候就要使用"編碼指示"來修正。關(guān)于 sys.defaultencoding,這個(gè)在解碼沒有明確指明解碼方式的時(shí)候使用。比如我有如下代碼:

 
 
  1. #! /usr/bin/env python     
  2. # -*- coding: utf-8 -*-   
  3.  

s = '中文' # 注意這里的 str 是 str 類型的,而不是 unicode   s.encode('gb18030') 這句代碼將 s 重新編碼為 gb18030 的格式,即進(jìn)行 unicode -> str 的轉(zhuǎn)換。因?yàn)?s 本身就是 str 類型的,因此 Python 會(huì)自動(dòng)的先將 s 解碼為 unicode ,然后再編碼成 gb18030。

因?yàn)榻獯a是python自動(dòng)進(jìn)行的,我們沒有指明解碼方 式,python 就會(huì)使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個(gè)類型就會(huì)出錯(cuò)。 拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯(cuò)了:

UNICODE編碼轉(zhuǎn)換格式,就是用來指導(dǎo)如何將 unicode 編碼成適合文件存儲(chǔ)和網(wǎng)絡(luò)傳輸?shù)淖止?jié)序列的形式 (unicode -> str)。像其他的一些Python編碼b2312, gb18030, big5 和 UTF 的作用是一樣的,只是編碼方式不同。#p#

Python編碼有兩種數(shù)據(jù)模型來支持字符串這種數(shù)據(jù)類型,一種是 str,另外一種是 unicode ,它們都是 sequence 的派生類型,這個(gè)可以參考 Python Language Ref 中的描述:

這里面是這么幾句:

 
 
  1. UnicodeDecodeError: 'ascii' codec   
  2. can't decode byte 0xe4 in position  
  3.    0: ordinal not in range(128)   
  4.  對于這種情況,我們有兩種方法來改正錯(cuò)誤:  
  5. 一是明確的指示出 s 的編碼方式#!  
  6.  /usr/bin/env python    
  7.  # -*- coding: utf-8 -*-   s =  
  8.  '中文'   s.decode('utf-8').  
  9. encode('gb18030') 最后更改   
  10. sys.defaultencoding 為文件的  
  11. Python編碼即可。  
  12.  

UTF:

一二句說明 str 和 unicode 的組成單元(item)是什么(因?yàn)樗鼈兺?sequence ) 。sequence 默認(rèn)的 __len__ 函數(shù)的返回值正是該序列組成單元的個(gè)數(shù)。這樣的話,len('abcd') == 4 和 len(u'我是中文') == 4 就很容易理解了。

第三句告訴我們像從文件輸入輸出的時(shí)候是用 str 來表示數(shù)據(jù)的數(shù)組。不止是文件操作,我想在網(wǎng)絡(luò)傳輸?shù)臅r(shí)候應(yīng)該也是這樣的。這就是為什么一個(gè)unicode 字符串在寫入文件或者在網(wǎng)絡(luò)上傳輸?shù)臅r(shí)候要進(jìn)行編碼的原因了。

Python編碼和解碼也就是 unicode 和 str 這兩種形式的相互轉(zhuǎn)化。編碼是 unicode -> str,相反的,解碼就是 str -> unicode。下面剩下的問題就是確定何時(shí)需要進(jìn)行編碼或者解碼了,像一些庫是 unicode 版的,這樣我們在將這些庫函數(shù)的返回值進(jìn)行傳輸或者寫入文件的時(shí)候就要考慮Python編碼成合適的類型。

關(guān)于文件開頭的"編碼指示",也就是 # -*- coding: -*- 這個(gè)語句。Python 默認(rèn)腳本文件都是 ANSCII 編碼的,當(dāng)文件中有非 ANSCII 編碼范圍內(nèi)的字符的時(shí)候就要使用"編碼指示"來修正。關(guān)于 sys.defaultencoding,這個(gè)在解碼沒有明確指明解碼方式的時(shí)候使用。比如我有如下代碼:

 
 
  1. #! /usr/bin/env python   
  2. # -*- coding: utf-8 -*-   
  3.  

s = '中文' # 注意這里的 str 是 str 類型的,而不是 unicode   s.encode('gb18030') 這句代碼將 s 重新編碼為 gb18030 的格式,即進(jìn)行 unicode -> str 的轉(zhuǎn)換。因?yàn)?s 本身就是 str 類型的,因此 Python 會(huì)自動(dòng)的先將 s 解碼為 unicode ,然后再編碼成 gb18030。

因?yàn)榻獯a是python自動(dòng)進(jìn)行的,我們沒有指明解碼方 式,Python編碼就會(huì)使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個(gè)類型就會(huì)出錯(cuò)。 拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯(cuò)了: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position   0: ordinal not in range(128) 

對于這種情況,我們有兩種方法來改正錯(cuò)誤: 一是明確的指示出 s 的編碼方式

 
 
  1. #! /usr/bin/env python     
  2. # -*- coding: utf-8 -*-     
  3. s = '中文'    
  4. s.decode('utf-8').encode('gb18030')   

最后更改 sys.defaultencoding 為文件的Python編碼即可。


本文題目:Python編碼對解決疑難問題的具體方法
地址分享:http://www.5511xx.com/article/dhdepss.html