1. 程式人生 > >Python中的字元編碼問題encode/decode

Python中的字元編碼問題encode/decode

Python中字元的編碼問題。
在進行編碼轉換的時候我們必須清楚,我們讀進來的字串,或者說我們要進行解碼的字串本身是何種編碼方式,然後就可以用decode對此字串進行解碼,解碼成unicode字串;然後對於解碼之後的unicode字串利用我們想要的編碼格式進行編碼。注意:讀進來的是正確內容,進行解碼然後利用另一種編碼之後的內容也可能是亂碼。
一般形式就是str1表示我們讀入的字串。Str1.decode(“gbk”).encode(“utf-8”)
不可以對str字串進行編碼,因為它已經是編碼後的形式了!!!
不可以對unicode字串進行解碼,因為它已經是使用某種編碼解碼後的形式了!!!

http://hi.baidu.com/%B8%E3%D0%A6%D0%A6%BB%B0%CD%BC%C6%AC/blog/item/c18cae23127ef25e9822eddb.html
首先,python 中有byte string和unicode string兩種不同的型別。因此,python 裡面的編碼和解碼也就是 unicode 和 byte 這兩種形式的相互轉化:編碼是 unicode -> byte,解碼就是 byte -> Unicode

http://hi.baidu.com/mxp446533129/blog/item/ab55d625d7e95c12918f9df0.html
str和unicode都是basestring的子類。嚴格意義上說,str其實是位元組串,它是unicode經過編碼後的位元組組成的序列。unicode才是真正意義上的字串,對位元組串str使用正確的字元編碼進行解碼後獲得。
對unicode進行解碼是錯誤的 
對str進行編碼也是錯誤的 
原始碼檔案中,如果有用到非ASCII字元,則需要在檔案頭部進行字元編碼的宣告。實際上Python只檢查#、coding和編碼字串,其他的字元都是為了美觀加上的。另外,Python中可用的字元編碼有很多,並且還有許多別名,還不區分大小寫,比如UTF-8可以寫成u8。參見http://docs.python.org/library/codecs.html#standard-encodings。

http://www.u85.us/viewnews-293.html
python的字串只能說是位元組串,你甚至可以在裡面存放一張圖片或者一個二進位制可執行檔案

http://www.cnblogs.com/baiyuyang/archive/2011/10/29/2228667.html
我讀取到的字串是gbk的,所以我很自然的用s.decode('gbk').encode('utf-8')來轉換。可是今天轉換時遇到如下異常:
 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 7-8: illegal multibyte sequence
這 是因為遇到了非法字元——尤其是在某些用C/C++編寫的程式中,全形空格往往有多種不同的實現方式,比如\xa3\xa0,或者\xa4\x57,這些 字元,看起來都是全形空格,但它們並不是“合法”的全形空格(真正的全形空格是\xa1\xa1),因此在轉碼的過程中出現了異常。 這樣的問題很讓人頭疼,因為只要字串中出現了一個非法字元,整個字串——有時候,就是整篇文章——就都無法轉碼。
解決辦法: s.decode('gbk', ‘ignore').encode('utf-8′)
因為decode的函式原型是decode([encoding], [errors='strict']),可以用第二個引數控制錯誤處理的策略,預設的引數就是strict,代表遇到非法字元時丟擲異常; 如果設定為ignore,則會忽略非法字元; 如果設定為replace,則會用?取代非法字元; 如果設定為xmlcharrefreplace,則使用XML的字元引用。


http://blog.iamzsx.me/show.html?id=81001
對有中文的檔案,都保持為utf-8格式,在檔案的開頭處都指明編碼coding:utf-8,檔案中的字串都統一成Unicode形式。
根據需要使用encode和decode函式進行轉換
對檔案輸入或者其他方式輸入的資料,也要使用decode函式相應轉換成Unicode,這樣會減少編碼帶來的麻煩。


相關推薦

python字元編碼:coding utf-8, unicde, defaultencoding, UnicodeDecodeError, UnicodeEncodeError

2.位元組與字元 計算機儲存的任何資料,包括各種文字、圖片、音視訊檔案等等,實際上都是一串二進位制數字01位元組序列組成的。相信大家都知道,一個位元組Byte(B)是8個位元bit(b)。 而字元,自然就是符號了。比如說二十六個英文字母,阿拉伯數字,以及在pyt

python編碼encode decode(解惑)

關於python 字串編碼一直沒有搞清楚,今天總結了一下。 Python 字串型別 Python有兩種字串型別:str 與 unicode。 字串例項 # -*- coding: utf-8 -*- # 這個是 str 的字串 s = '關關雎鳩' # 這個是 unicode 的字串 u = u'

python字串的encodedecode

為什麼Python使用過程中會出現各式各樣的亂碼問題,明明是中文字元卻顯示成“/xe4/xb8/xad/xe6/x96/x87”的形式?為什麼會報錯“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:

python關於編碼,json格式的中文輸出顯示

pri 整體 pytho src repr 接口 ensure 輸出 unicode 但我們用requests請求一個返回json的接口時候, 語法是 result=requests.post(url,data).content print type(result),re

python編碼問題】

網絡 文件操作 指定 enc 引號 pytho ascii碼 磁盤 encode 1、首先要在開頭說明編碼方式為:utf-8 例如:-*- coding: utf-8 -*- 2、如果遇到字符串,立刻轉化為unicode,不要使用str(),直接使用unicode() un

編碼-encode,decode

encode utf-8 gbk 其他 nco 例子 解碼 unicode 英語 編碼:decode:解碼:把一種編碼轉換成unicodeencode:編碼:把unicode轉換成其他編碼gbk -> utf-8 ? xxgbk -> unicode

Python編碼問題:ASCII碼 Unicoden編碼 UTF-8編碼

分享 動態 src 服務 .com 傳輸 ascii 函數計算 row 編碼 字符串是一種數據類型,但是,字符串比較特殊的是還有一個編碼問題。 因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(

python編碼

編碼 ascii碼             一個字元佔8位,用一個位元組表示            A:00000010 8位 一個位元組 Unicode    一個字元佔32位,用四個

程式設計過程字元編碼亂碼問題彙總

一、避免 亂碼 的一些注意點: 1.儘量使用統一的編碼,如果你是重頭開發一個系統,特別是Java開發的,推薦從頁面到資料庫再到配置檔案都使用UTF-8進行編碼,安全第一。 2.SetCharacterEncodingFilter的使用,這個東西不是萬能的,但是沒有它就會很麻煩,如果是

python基礎--字元編碼

一 、什麼是編碼? 基本概念很簡單。首先,我們從一段資訊即訊息說起,訊息以人類可以理解、易懂的表示存在。我打算將這種表示稱為“明文”(plain text)。對於說英語的人,紙張上列印的或螢幕上顯示的英文單詞都算作明文。 其次,我們需要能將明文表示的訊息轉成另外某種表示,我們還需要能將編碼文

python基礎 字元編碼

一.計算機基礎知識   應用程式任何操作硬體的的請求,都需要向作業系統發起呼叫,然後由作業系統去呼叫;   cpu----記憶體-----硬碟   二.文字編輯器存取檔案的原理   1.開啟編輯器就打開了一個啟動的進行,是在記憶體中,所以編輯器編寫的內容也都是存放於記憶體中的,斷電後資料丟

Python基礎-字元編碼

字元編碼 Python 直譯器在載入.py檔案中的程式碼,會對內容進行編碼(預設asciII) ASCII(American Standard Code for Information Interchange,美國標準資訊交換程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其它西歐語言,其

python學習-字元編碼區別

一、字元編碼 ASCII編碼127個字元,佔8bit位,1byte。 GB2312編碼7445個字元,包括6763和漢字和682個其他符號。(1980年) GB18030編碼27484個字元,同時收錄了藏文、蒙文、維吾爾文等少數民族文字,PC必須支援,嵌入式可以例外。(2000年) 從ASCII、GB

python 編碼解碼

一:編碼背景   因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元

徹底搞懂Python字元編碼

前言:中文編碼問題一直是程式設計師頭疼的問題,而Python2中的字元編碼足矣令新手抓狂。本文將盡量用通俗的語言帶大家徹底的瞭解字元編碼以及Python2和3中的各種編碼問題。 一、什麼是字元編碼。 要徹底解決字元編碼的問題就不能不去了解到底什麼是字元編碼。計算機從本質上

1分鐘讓你搞懂python編碼!專門給小白寫的一篇文章

很多初學者會被Python中UnicodeDecodeError弄得一頭汙水,相信你也一定遇到過這個問題,這裡我們講一下編碼相關的知識。 (部分內容參考了 《編寫高質量Python程式碼的59個有效方法》一書 ) 1. 原理: 加群943752371即可獲取十套PDF和

深入淺出地,徹徹底底地理解python編碼

python處理文字的功能非常強大,但是如果是初學者,沒有搞清楚python中的編碼機制,也經常會遇到亂碼或者decode error。本文的目的是簡明扼要地說明python的編碼機制,並給出一些建議。 問題1:問題在哪裡? 問題是我們的靶子,心中沒有問題去學習就會抓不住

MySql資料庫查詢修改表字元編碼(charset)的方法

MySQL字符集多種多樣,下面為您列舉了其中三種最常見的MySQL字符集檢視方法,該方法供您參考,希望對您學習MySQL資料庫能有所啟迪。 一、檢視MySQL資料庫伺服器和資料庫MySQL字符集。 mysql> show variables like '%char%

Python學習【第5篇】:Python字元編碼問題 python之----------字元編碼具體原理

python之----------字元編碼具體原理 1.記憶體和硬碟都是用來儲存的。 CPU:速度快 硬碟:永久儲存 &nb

python字元編碼和解碼問題 UnicodeEncodeError 'gbk' codec can't encod

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                     先說說我為何出現了這個問題,因為學完爬蟲後想拿豆瓣電影Top250練練手,這個是參考的連結(http://blog.csdn.net/fighting