#Python3中os中编码encode与decode 解码

21.编码encode

import os 								#导入os 库
path = "C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"
with open(path,"wb") as f1:
    f1.write(b"sunck is a good boy")
相当于
with open(path,"wb") as f1:
    str = "sunck is a good boy"
    f1.write(str.encode("utf-8"))
with open(path,"wb",encoding="utf-8") as f1:
#通过字节方式写入文件的时候,传给Python的必须是字节数据,否则就会报错:
#ValueError: binary mode doesn't take an encoding argument

22.decode 解码

import os 										#导入os 库
with open(path,"w",encoding="utf-8") as f3:
    str = "sunck is a good boy萨a德"
    f3.write(str)

with open(path,"r",errors= "ignore") as f4:		 #不写errors= "ignore" 此处也没报错
    data = f4.read()
    print(data)
    print(type(data))
    

编码和解码
从本质上来说,编码和解码就是Python中str和bytes这两种字符串类型之间的互相转换。, str包含一个encode方法,使用特定编码将该字符串其转换为一个bytes,这称之为编码。 bytes类包含了一个decode方法,也接受一个编码作为单个必要参数,并返回一个str,这称之为解码。这种转换操作是显式的操作,且必须根据数据被编码时采用的编码类型进行解码。

python3似乎对一切的unicode都那么的友好,当一个字符串里存在unicode的时候,只要字符串是硬编码的,就可以转换成中文打印在控制台上,但是,假如你。。的这段含有‘\u’的unicode编码不是硬编码进脚本的,而是通过requests在网上爬的。。。那么你会发现,你打印出来的,还是长这样的unicode编码,换句话说,解释器这个时候根本就没认出这东西原来是unicode编码,当成普通的字符序列了。

Python 3.X带有3种字符串对象类型——一种用于文本数据,两种用于二进制数据:
str表示Unicode文本(8位的和更宽的)
bytes表示二进制数据
bytearray,是一种可变的bytes类型’’’
在使用python3的requests模块时,

发现获取响应有两种方式:(r表示response响应内容)
其一,为文本响应内容, r.text
其二,为二进制响应内容,r.content
r.text实际上就是Unicode的响应内容,而r.content是二进制的响应内容,
r.text方法返回的是用unicode编码的响应内容。响应内容的编码取决于HTTP消息头,如果你有HTTP之外的知识来猜测编码,你应该在访问这个属性之前设置合适的r.encoding,也就是说,你可以用r.encoding来改变编码,这样当你访问r.text ,Request 都将会使用r.encoding的新值

解决的办法就是unicode_escape

print(res.content.decode("unicode_escape"))

总结
str包含一个encode方法,使用特定编码将该字符串其转换为一个bytes,这称之为编码。 bytes类包含了一个decode方法,也接受一个编码作为单个必要参数,并返回一个str,这称之为解码。
str.encode() 把一个字符串转换为其 bytes形式
bytes.decode() 把 bytes转换为其字符串形式

  1. 遇到类似的编码问题时,先检查响应内容text是什么类型,
    如果type(text) is bytes,那么
    text.decode(‘unicode_escape’)

如果type(text) is str,那么
text.encode(‘unicode_escape’).decode(‘unicode_escape’)

参考知乎:https://www.zhihu.com/question/26921730
https://www.cnblogs.com/cnhkzyy/p/9092644.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的字符串编码解码可以通过encode()和decode()方法来实现。这两个方法都是字符串对象的方法,用于将字符串从一种编码格式转换为另一种编码格式。 encode()方法可以将字符串编码为指定的编码格式,其语法为: ```python string.encode(encoding=编码格式, errors=错误处理) ``` 其encoding参数是必须的,用于指定要使用的编码格式,errors参数是可选的,用于指定错误处理方式。如果不指定errors参数,则默认使用strict模式,即如果存在无法编码的字符,则会抛出UnicodeError异常。 例如,将一个字符串编码为UTF-8格式: ```python string = "Hello World" encoded_string = string.encode(encoding="utf-8") print(encoded_string) ``` 输出结果为:b'Hello World'。其,b表示这是一个字节串对象,而不是字符串对象。 decode()方法可以将字节串解码为指定的编码格式,其语法为: ```python bytes.decode(encoding=编码格式, errors=错误处理) ``` 其encoding参数是必须的,用于指定要使用的编码格式,errors参数是可选的,用于指定错误处理方式。如果不指定errors参数,则默认使用strict模式,即如果存在无法解码的字节,则会抛出UnicodeError异常。 例如,将一个UTF-8格式的字节串解码为字符串: ```python bytes_string = b'Hello World' decoded_string = bytes_string.decode(encoding="utf-8") print(decoded_string) ``` 输出结果为:Hello World。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值