成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python編碼對解決疑難問題的具體方法

開發 后端
針對一些難記的編碼,Python編碼會提供一些比較實用的方法,有針對性的進行解答,或提供相關的方案對計算機編碼進行規范。

初學Python編碼的相關人員經常會遇到很多的編碼問題,常常會遇到很多的不解的編碼問題,即使記下因為繁瑣,也會忘記,以下介紹的是如何避免相關的情況。是我們在計算機的相關的應用中變得更為流暢。

UNICODE:

使用2個甚至4個字節來編碼一個字符,因此可以將世界上所有的字符進行統一.

Python:

標準的Python編碼只使用7個比特來表示一個字符,因此最多編碼128個字符。擴充的 ANSCII 使用8個比特來表示一個字符,最多也只能編碼 256 個字符。

UNICODE:

使用2個甚至4個字節來編碼一個字符,因此可以將世界上所有的字符進行統一編碼。

UTF:

UNICODE編碼轉換格式,就是用來指導如何將 unicode 編碼成適合文件存儲和網絡傳輸的字節序列的形式 (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)是什么(因為它們同是 sequence ) 。sequence 默認的 __len__ 函數的返回值正是該序列組成單元的個數。這樣的話,len('abcd') == 4 和 len(u'我是中文') == 4 就很容易理解了。

第三句告訴我們像從文件輸入輸出的時候是用 str 來表示數據的數組。不止是文件操作,我想在網絡傳輸的時候應該也是這樣的。這就是為什么一個unicode 字符串在寫入文件或者在網絡上傳輸的時候要進行Python編碼的原因了。#t#

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

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

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

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

因為解碼是python自動進行的,我們沒有指明解碼方 式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。 拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:

UNICODE編碼轉換格式,就是用來指導如何將 unicode 編碼成適合文件存儲和網絡傳輸的字節序列的形式 (unicode -> str)。像其他的一些Python編碼b2312, gb18030, big5 和 UTF 的作用是一樣的,只是編碼方式不同。#p#

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

這里面是這么幾句:

  1. UnicodeDecodeError: 'ascii' codec   
  2. can't decode byte 0xe4 in position  
  3.    0: ordinal not in range(128)   
  4.  對于這種情況,我們有兩種方法來改正錯誤:  
  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)是什么(因為它們同是 sequence ) 。sequence 默認的 __len__ 函數的返回值正是該序列組成單元的個數。這樣的話,len('abcd') == 4 和 len(u'我是中文') == 4 就很容易理解了。

第三句告訴我們像從文件輸入輸出的時候是用 str 來表示數據的數組。不止是文件操作,我想在網絡傳輸的時候應該也是這樣的。這就是為什么一個unicode 字符串在寫入文件或者在網絡上傳輸的時候要進行編碼的原因了。

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

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

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

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

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

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

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

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

責任編輯:佚名 來源: IT168
相關推薦

2012-05-04 09:18:46

2017-04-18 22:50:10

OSPF疑難問題

2011-05-06 14:05:22

打印機照片打印

2009-06-18 08:46:56

微軟Windows 7操作系統

2010-07-27 11:09:43

設置NFS

2010-01-26 10:13:45

學習C++

2010-07-21 14:33:01

刪除telnet

2009-12-23 08:53:56

Windows 7遠程協助

2009-12-25 10:59:08

WPF Timer

2010-07-05 14:41:21

SQL Server數

2011-04-01 14:05:09

SQL數據庫

2010-03-11 17:16:48

Python平臺

2011-04-26 16:39:30

照片打印機

2011-08-03 13:25:19

布線系統規劃

2011-04-01 13:34:12

zabbix

2009-12-03 14:43:46

phpMyAdmin配

2023-05-29 18:33:30

得物H5容器

2016-03-22 15:05:00

定性移動數據開源

2012-05-14 11:48:18

MSinfo32Windows Ser

2010-03-19 15:47:49

Python語法檢查
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区日韩 | 亚洲视频一区二区三区 | 久久av在线播放 | 鸳鸯谱在线观看高清 | www.99热.com| 久久69精品久久久久久国产越南 | 天堂精品| 欧美久久久久久 | 久久y| 欧美成年人视频在线观看 | 中文字幕精品视频在线观看 | 午夜色播 | 日韩综合在线 | 日韩欧美中文 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品美女久久久久久久久久久 | 最新av在线播放 | 天堂一区| 国产在线观看一区二区三区 | 亚洲欧美成人影院 | 亚洲欧美一区二区三区国产精品 | 偷牌自拍 | 亚洲欧美在线视频 | 欧美成人一区二区 | 精品国产乱码久久久久久闺蜜 | 欧美中文字幕 | 亚洲欧洲视频 | 欧美精品久久久 | 精品视频一区二区三区在线观看 | 国产91久久精品一区二区 | 在线观看免费毛片 | 久久国产精品91 | 亚洲精品视频免费观看 | 在线观看中文字幕 | 免费簧片视频 | 国产视频一区二区三区四区五区 | 91成人在线视频 | 久久噜噜噜精品国产亚洲综合 | 国产在线资源 | 久久久国产一区 | 天天干亚洲 |