當前位置:首頁 » 編程語言 » decodepython

decodepython

發布時間: 2022-08-06 05:52:15

python3 沒有str.decode怎麼辦

  1. python3中encode和decode跟python2還是有一定的區別的,在python3中:

  2. encode(編碼):按照某種規則將「文本」轉換為「位元組流」。 python 3中表示:unicode變成str

  3. decode(解碼):將「位元組流」按照某種規則轉換成「文本」。 python3中表示:str變成unicode

  4. 字元串在Python內部的表示是Unicode編碼,因此在做編碼轉換時,通常需要以Unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成Unicode,再從Unicode編碼(encode)成另一種編碼。

Ⅱ python讀取txt文檔的時候遇到decode錯誤如何解決

你用的是python3才會出這個問題。python3在readlines里,預設會使用操作系統當前的編碼來解析文件,比如windows下就用GBK,在linux下則根據當前language來設置解析辦法。


解決的辦法是在open()里加上參數


fi=open('somefile.txt','r')

改成

fi=open('somefile.txt','rt',encoding="utf-8")

這個encoding就是指定編碼格式。如果encoding="utf-8"不行,你就改成encoding="gb18030",如果還不成,就改成encoding="big-5"。如果還不成。只能手工將" —"
替換成負號。

Ⅲ python read.decode後怎麼轉換為字典列表

1、python2與python3稍微有點區別
2、python2中默認的字元編碼格式都是unicode,在字元串前加'u',表示unicode 編碼
3、將unicode轉換成中文,只需要用deconde解碼就可以了
>>> u='歡迎'
>>> e=u.encode()
>>> e
b'\xe6\xac\xa2\xe8\xbf\x8e'
>>> e.decode()#python3中默認就是utf-8編碼
'歡迎'
>>> e.decode('gbk')#如果解碼為gbk就是亂碼
'嬈四繋'
python2編碼環境比較復雜,在這里不做詳細說明

Ⅳ python3爬蟲爬百度貼吧decode("utf-8")出錯

我寫了下代碼。沒有編碼問題,是不是不用decode?

import requests

r1 = requests.get("http://tieba..com/f?ie=utf-8&kw=python&fr=search")

print(r1.text)

Ⅳ python中decode和encode的區別

字元串編碼常用類型:utf-8,gb2312,cp936,gbk等。
python中,我們使用decode()和encode()來進行解碼和編碼在python中,使用unicode類型作為編碼的基礎類型。

Ⅵ python3.4 編碼有哪些

Python3中的編碼問題前,第一個段落對位元組、ASCII與Unicode與UTF-8等進行基本介紹,如果不對這幾種編碼犯頭暈,可直接跳過。
ASCII與Unicode與UTF-8與GBK

首先從老大哥說起。跟很多人一樣,大學讀了這么久,久仰ASCII編碼的大名。要說這個老大哥,我們再先從位元組說起。一個位元組包括八個比特位,每個比特位表示0或1,一個位元組即可表示從00000000到11111111共2^8=256個數字。一個ASCII編碼使用一個位元組(除去位元組的最高位作為作奇偶校驗位),ASCII編碼實際使用一個位元組中的7個比特位來表示字元,共可表示2^7=128個字元。比如那時寫C語言的程序,就經常要背下ASCII編碼中的01000001(即十進制的65)表示字元『A』,01000001加上32之後的01100001(即十進制的97)表示字元『a』。現在打開Python,調用chr和ord函數,我們可以看到Python為我們對ASCII編碼進行了轉換。

第一個00000000表示空字元,因此ASCII編碼實際上只包括了
字母、標點符號、特殊符號等共127個字元。因為ASCII是在美國出生的,對於由字母組成單詞進而用單詞表達的英文來說也是夠了。但是中國人、日本人、
韓國人等其他語言的人不服了。中文是一個字一個字,ASCII編碼用上了渾身解數256個字元都不夠用。

因此後來出現了Unicode編碼。Unicode編碼通常由兩個位元組組成,共表示256*256個字元,即所謂的UCS-2。某些偏僻字還會用到四個位元組,即所謂的UCS-4。也就是說Unicode標准也還在發展。但UCS-4出現的比較少,我們先記住:最原始的ASCII編碼使用一個位元組編碼,但由於語言差異字元眾多,人們用上了兩個位元組,出現了統一的、囊括多國語言的Unicode編碼。

在Unicode中,原本ASCII中的127個字元只需在前面補一個全零的位元組即可,比如前文談到的字元『a』:01100001,在Unicode中變成了00000000 01100001。不久,美國人不開心了,吃上了世界民族之林的大鍋飯,原本只需一個位元組就能傳輸的英文現在變成兩個位元組,非常浪費存儲空間和傳輸速度。

人們再發揮聰明才智,於是出現了UTF-8編碼。因為針對的是空間浪費問題,因此這種UTF-8編碼是可變長短的,從英文字母的一個位元組,到中文的通常的三個位元組,再到某些生僻字的六個位元組。解決了空間問題,UTF-8編碼還有一個神奇的附加功能,那就是兼容了老大哥的ASCII編碼。一些老古董軟體現在在UTF-8編碼中可以繼續工作。

注意除了英文字母相同,漢字在Unicode編碼和UTF-8編碼中通常是不同的。比如漢字的『中』字在Unicode中是01001110
00101101,而在UTF-8編碼中是11100100 10111000
10101101。

我們祖國母親自然也有自己的一套標准。那就是GB2312和GBK。當然現在挺少看到。通常都是直接使用UTF-8。記得我唯一一次看到GB編碼的網頁,是一個成人網站。

Python3中的默認編碼

Python3中默認是UTF-8,我們通過以下代碼:

import sys

sys.getdefaultencoding()

可查看Python3的默認編碼。

Python3中的encode和decode

Python3中字元編碼經常會使用到decode和encode函數。特別是在抓取網頁中,這兩個函數用的熟練非常有好處。我的理解,encode的作用,使我們看到的直觀的字元轉換成計算機內的位元組形式。decode剛好相反,把位元組形式的字元轉換成我們看的懂的、直觀的、「人模人樣」的形式。如下圖。

\x表示後面是十六進制,\xe4\xb8\xad即是二進制的11100100 10111000
10101101。也就是說漢字『中』encode成位元組形式,是11100100 10111000
10101101。同理,我們拿11100100
10111000 10101101也就是\xe4\xb8\xad來decode回來,就是漢字『中』。完整的應該是b'\xe4\xb8\xad',在Python3中,以位元組形式表示的字元串則必須加上前綴b,也就是寫成上文的b'xxxx'形式。

前文說的Python3的默認編碼是UTF-8,所以我們可以看到,Python處理這些字元的時候是以UTF-8來處理的。因此從上圖可以看到,就算我們通過encode('utf-8')特意把字元encode為UTF-8編碼,出來的結果還是相同:b'\xe4\xb8\xad'。

明白了這一點,同時我們知道UTF-8兼容ASCII,我們可以猜想大學時經常背誦的『A』對應ASCII中的65,在這里是不是也能正確的decode出來呢。十進制的65轉換成十六進制是41,我們嘗試下:

b'\x41'.decode()

結果如下。果然是字元『A』

Python3中的編碼轉換

據說字元在計算機的內存中統一是以Unicode編碼的。只有在字元要被寫進文件、存進硬碟或者從伺服器發送至客戶端(例如網頁前端的代碼)時會變成utf-8。但其實我比較關心怎麼把這些字元以Unicode的位元組形式表現出來,露出它在內存中的廬山正面目的。這里有個照妖鏡:

xxxx.encode/decode('unicode-escape')

輸出如下

b'\\u4e2d'還是b'\u4e2d,一個斜杠貌似沒影響。同時可以發現在shell窗口中,直接輸'\u4e2d'和輸入b'\u4e2d'.decode('unicode-escape')是相同的,都會列印出漢字『中』,反而是'\u4e2d'.decode('unicode-escape')會報錯。說明說明Python3不僅支持Unicode,而且一個『\uxxxx』格式的Unicode字元可被辨識且被等價於str類型。

如果我們知道一個Unicode位元組碼,怎麼變成UTF-8的位元組碼呢。懂了以上這些,現在我們就有思路了,先decode,再encode。代碼如下:

xxx.decode('unicode-escape').encode()

測試如下:

可以看到最後輸出的UTF-8位元組與上面的相同。嘗試成功。所以其他的編碼之間的轉換,大概也是如此。

最後的擴展

還記得剛剛那個ord嗎。時代變遷,老大哥ASCII被人合並,但ord還是有用武之地。試試ord('中'),輸出結果是20013。20013是什麼呢,我們再試試hex(ord('中')),輸出結果是'0x4e2d',也就是20013是我們在上文見面了無數次的x4e2d的十進制值。這里說下hex,是用來轉換成十六進制的函數,學過單片機的人對hex肯定不會陌生。

最後的擴展,在網上看到的他人的問題。我們寫下類似於'\u4e2d'的字元,Python3知道我們想表達什麼。但是讓Python讀取某個文件的時候出現了'\u4e2d',是不是計算機就不認識它了呢?後來下文有人給出了答案。如下:

import codecs

file = codecs.open( "a.txt", "r", "unicode-escape" )

u = file.read()

print(u)

Ⅶ 為什麼python decode每效果

decode()方法使用注冊編碼的編解碼器的字元串進行解碼。它默認為默認的字元串編碼。

語法

以下是decode()方法的語法:
str.decode(encoding='UTF-8',errors='strict')

參數

encoding -- 這是所使用的編碼。對於所有的編碼方案的列表,請訪問:標准編碼庫

errors --
這可能是給定一個不同的錯誤處理機制。默認的錯誤是「嚴格」,即編碼錯誤提出UnicodeError。其他可能的值是ignore',
'replace', 'xmlcharrefreplace', 'backslashreplace'
並通過codecs.register_error().注冊的任何其他名稱。

返回值

此方法返回的字元串的解碼版本。

例子

下面的例子顯示了decode()方法的使用。

#!/usr/bin/python

str = "this is string example....wow!!!";
str = str.encode('base64','strict');

print "Encoded String: " + str;
print "Decoded String: " + str.decode('base64','strict')

當我們運行上面的程序,它會產生以下結果:
Encoded String: =

Decoded String: this is string example....wow!!!

Ⅷ python3.3中為什麼decode報錯 我使用python3.3在用encode()時,沒

Python 3中的str類型對象有點像Python 2中的unicode。


Python 3中的str是未編碼的,str有一個encode方法,調用這個方法後將產生一個編碼後的byte類型的字元串(這有點像Python 2中的str)。而byte類型的字元串支持解碼操作。


例如:

>>>s='海闊天空'
>>>hasattr(s,'decode')
False
>>>bs=s.encode('utf-8')
>>>type(bs)
<class'bytes'>
>>>bs
b''
>>>hasattr(bs,'encode')
False
>>>bs.decode('utf-8')
'海闊天空'

注意:Python 3中str不再具有decode方法,因為它存儲的是「未編碼」的字元串。decode操作交由byte完成了。

Ⅸ python3 decode()和encode()默認是什麼編碼格式

默認是utf-8
python3全面支持utf-8,再也不必為編碼煩惱了

熱點內容
tampermonkey腳本 發布:2025-01-22 18:53:17 瀏覽:116
windows7共享文件夾 發布:2025-01-22 18:53:17 瀏覽:478
如何調節安卓手機的內存 發布:2025-01-22 18:49:30 瀏覽:638
佳能相機存儲卡怎麼取消 發布:2025-01-22 18:40:59 瀏覽:568
天貓寶貝上傳 發布:2025-01-22 18:35:09 瀏覽:544
ipad如何登錄金鏟鏟安卓賬號 發布:2025-01-22 18:32:09 瀏覽:319
加密溝通 發布:2025-01-22 18:31:22 瀏覽:555
win7ftp用戶名和密碼設置 發布:2025-01-22 17:46:48 瀏覽:221
三表聯查的sql語句 發布:2025-01-22 17:27:13 瀏覽:418
安卓怎麼解壓分卷壓縮 發布:2025-01-22 17:24:59 瀏覽:721