当前位置:首页 » 编程语言 » 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,再也不必为编码烦恼了

热点内容
win7ftp用户名和密码设置 发布:2025-01-22 17:46:48 浏览:221
三表联查的sql语句 发布:2025-01-22 17:27:13 浏览:418
安卓怎么解压分卷压缩 发布:2025-01-22 17:24:59 浏览:721
欧姆龙plc编程语言 发布:2025-01-22 17:21:48 浏览:396
和值编程 发布:2025-01-22 17:20:07 浏览:518
微信青少年模式独立密码是什么 发布:2025-01-22 16:52:06 浏览:590
腾讯云服务器怎么购买 发布:2025-01-22 16:45:01 浏览:631
天猫怎么上传视频 发布:2025-01-22 16:40:02 浏览:728
安卓如何把抖音评论换成黑色 发布:2025-01-22 16:30:57 浏览:702
连接池Java 发布:2025-01-22 16:28:27 浏览:260