错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc5 in position 13: invalid continuation byte
编码错误,主要是有中的编码
例如:
b'\r\nWindows IP \xc5\xe4\xd6\xc3\r\n\r\n\r\n\xd2\xd4\xcc\xab\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 \xd2\xd4\xcc\xab\xcd\xf8:\r\n\r\n \xc3\xbd\xcc\xe5\xd7\xb4\xcc\xac . . . . . . . . . . . . : \xc3\xbd\xcc\xe5\xd2\xd1\xb6\xcf\xbf\xaa\xc1\xac\xbd\xd3\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n\r\n\xd2\xd4\xcc\xab\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 \xd2\xd4\xcc\xab\xcd\xf8 2:\r\n\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n \xb1\xbe\xb5\xd8\xc1\xb4\xbd\xd3 IPv6 \xb5\xd8\xd6\xb7. . . . . . . . : fe80::8d3c:21a5:cd26:3fb5\r\n IPv4 \xb5\xd8\xd6\xb7 . . . . . . . . . . . . : 192.168.56.1\r\n \xd7\xd3\xcd\xf8\xd1\xda\xc2\xeb . . . . . . . . . . . . : 255.255.255.0\r\n \xc4\xac\xc8\xcf\xcd\xf8\xb9\xd8. . . . . . . . . . . . . : \r\n\r\n\xce\xde\xcf\xdf\xbe\xd6\xd3\xf2\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 wlan0:\r\n\r\n \xc3\xbd\xcc\xe5\xd7\xb4\xcc\xac . . . . . . . . . . . . : \xc3\xbd\xcc\xe5\xd2\xd1\xb6\xcf\xbf\xaa\xc1\xac\xbd\xd3\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n\r\n\xce\xde\xcf\xdf\xbe\xd6\xd3\xf2\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 \xb1\xbe\xb5\xd8\xc1\xac\xbd\xd3* 1:\r\n\r\n \xc3\xbd\xcc\xe5\xd7\xb4\xcc\xac . . . . . . . . . . . . : \xc3\xbd\xcc\xe5\xd2\xd1\xb6\xcf\xbf\xaa\xc1\xac\xbd\xd3\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n\r\n\xce\xde\xcf\xdf\xbe\xd6\xd3\xf2\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 \xb1\xbe\xb5\xd8\xc1\xac\xbd\xd3* 4:\r\n\r\n \xc3\xbd\xcc\xe5\xd7\xb4\xcc\xac . . . . . . . . . . . . : \xc3\xbd\xcc\xe5\xd2\xd1\xb6\xcf\xbf\xaa\xc1\xac\xbd\xd3\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n\r\n\xd2\xd4\xcc\xab\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 eth0:\r\n\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n IPv4 \xb5\xd8\xd6\xb7 . . . . . . . . . . . . : 192.168.1.103\r\n \xd7\xd3\xcd\xf8\xd1\xda\xc2\xeb . . . . . . . . . . . . : 255.255.255.0\r\n \xc4\xac\xc8\xcf\xcd\xf8\xb9\xd8. . . . . . . . . . . . . : 192.168.1.1\r\n\r\n\xd2\xd4\xcc\xab\xcd\xf8\xca\xca\xc5\xe4\xc6\xf7 VMware Network Adapter VMnet8:\r\n\r\n \xc1\xac\xbd\xd3\xcc\xd8\xb6\xa8\xb5\xc4 DNS \xba\xf3\xd7\xba . . . . . . . : \r\n \xb1\xbe\xb5\xd8\xc1\xb4\xbd\xd3 IPv6 \xb5\xd8\xd6\xb7. . . . . . . . : fe80::e909:6c8a:32e0:f633%8\r\n IPv4 \xb5\xd8\xd6\xb7 . . . . . . . . . . . . : 192.168.110.1\r\n \xd7\xd3\xcd\xf8\xd1\xda\xc2\xeb . . . . . . . . . . . . : 255.255.255.0\r\n \xc4\xac\xc8\xcf\xcd\xf8\xb9\xd8. . . . . . . . . . . . . : \r\n'
采用utf-8解码会报错,可以用GBK或者是“unicode_escape”进行解码
reserve = conn.recv(10000).decode() #linux # reserve = conn.recv(10000).decode("unicode_escape") #windows 中文 # reserve = conn.recv(10000).decode("GBK") # windows 中文
在 python 在源代码文件中,,声明如下:
因为python 只检查 #、coding 还有编码字符串,所以你可能会看到下面的声明,这是一些人为了美丽和其他原因写的:
- #-*-coding:UTF-8-*-
Python内部字符串通常是 Unicode编码。
decode 将其他编码字符串转换为Unicode编码,egname.decode(“GB2312)GB2312编码的字符串name转换成Unicode编码encode 的作用是将Unicode编码转换成其他编码的字符串,egname.encode(”GB2312)表示将GB2312编码的字符串name转换成GB2312编码
因此,编码转换必须首先知道 name 是那种编码,然后 decode 成 Unicode 编码,最后载 encode 需要编码的编码。当然,如果 name 已经就是 Unicode 编码,不需要进行 decode 解码转换,直接使用 encode 您可以编码成您需要的编码。
eg: 由于内置函数 open() 打开文件时,read() 读取的是 str,读取后需要使用正确的编码格式进行 decode()。write() 写入时,如果参数是 Unicode,则需要使用你希望写入的编码进行 encode(),如果是其他编码格式的 str,则需要先用该 str 的编码进行 decode(),转成 Unicode 后再使用写入的编码进行 encode()。如果直接将 Unicode 作为参数传入 write() ,python 将先使用源代码文件声明的字符编码进行编码然后写入。
-
# coding: UTF-8
-
fp1 = open('test.txt', 'r')
-
info1 = fp1.read()
-
# 已知是 GBK 编码,解码成 Unicode
-
tmp = info1.decode('GBK')
-
fp2 = open('test.txt', 'w')
-
# 编码成 UTF-8 编码的 str
-
info2 = tmp.encode('UTF-8')
-
fp2.write(info2)
-
fp2.close()
判断是 s 字符串否为Unicode,如果是返回True,不是返回False :
isinstance(s, unicode)
下面代码可以获取系统默认编码:
-
#!/usr/bin/env python
-
#coding=utf-8
-
import sys
-
print sys.getdefaultencoding()
如何来改变python的默认编码呢?如下有两种方式:
方式一:在python代码中进行改变,代码如下:
-
import sys
-
reload(sys)
-
sys.setdefaultencoding('utf-8')
方式二:python安装目录下的lib\site-packages文件夹下新建一个sitecustomize.py,文件中的代码为:
-
import sys
-
sys.setdefaultencoding('utf-8')
参考网址:python 导入数据错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start_计算法的博客-CSDN博客