ASCII表及中文解释参考:https://www.csdn.net/tags/MtTaAg5sMjc4MDQ0LWJsb2cO0O0O.html
各种编码方式:https://zhuanlan.zhihu.com/p/46216008
参考:https://blog.csdn.net/cpongo10/article/details/98942464?
import urllib.request import chardet #图片作为访问数据的连接时 #https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png url = 'http://www.baidu.com' a = urllib.request.urlopen(url) print(a.read(10)) #读取网页内容 encode = chardet.detect(a.read(10)) # 读取网页内容,并查看内容编码方式 print(encode) print ( encode [ 'encoding' ] )
结果如下图,从结果中分析,chardet.detect函数的返回值是一个字典类型的对象,需要注意的是,chardet.detect函数的参数必须是Expected object of type bytes or bytearray类型的数据。从网络中读取的数据就是bytes类型的。
一个文件test.txt的内容写入**“abd中国”**,
import urllib.request
import chardet
with open('test.txt','rb+')as f: #注意必须是b的读文件最后的数据才是bytes
txt=f.read()
print(txt)
encode = chardet.detect(txt) # 读取网页内容,并查看内容编码方式
print(encode)
从显示结果中可以看出,显示的字节串若是ASCII码的字符就按原来的形式输出,若是中文字符就按照utf-8的16进制的格式输出。
参考:https://www.zhihu.com/question/294660079
下面程序中的读取文件中就是一个“中”,但读取后显示的是b’xe4xb8xad’(输出时的16进制格式字符串),而使用ord(“中”)后得到的结果是20013,对应的16进制是0x4e2d表示。同一个中文字符对应了不同的值,这主要因为使用了不同的编码方式:Unicode 不是单个编码,包含了 UTF-8/16/32 编码的字节数,只是习惯将UTF-16称之为Unicode,
BMP 中的汉字(常用汉字都在这里面)
UTF-8 3 字节
UTF-16 2 字节
UTF-32 4 字节
BMP 外的汉字
UTF-8 4 字节
UTF-16 4 字节
UTF-32 4 字节
import urllib.request
import chardet
with open('test.txt','rb+')as f:
txt=f.read()
print(txt) # b'xe4xb8xad'
encode = chardet.detect(txt) # 读取网页内容,并查看内容编码方式
print(encode) #
#中文的“中”字的utf-8编码方式,每个中文字符占用三个字节,
#但在(UTF-16)unicode编码中使用的是两个字节
#参考:https://www.zhihu.com/question/294660079
print(str(b'xe4xb8xad','utf-8'))
print(ord("中")) # 20013,这里用了unicode编码的值
print(hex(20013)) # 0x4e2d ,表示的是16进制形式
bytes数据和str的数据变化方式
参考:https://blog.csdn.net/qq_46119688/article/details/122640639
python各种进制数据的格式:
| 进制名称 | 数据 | 十进制的值 |
|---|---|---|
| 八进制数据 | 0o10 | 8 |
| 16进制数据 | 0x10 | 16 |
| 二进制数据 | 0b10 | 2 |



