关于python基础错误UnicodeDecodeError 'ascii' codec can't decode byte 0xe6

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe6

当路径或数据名称中有中文存在时,需要指定为中文类编码,ASCII码不能识别。
在程序头添加语句# -- coding: utf-8 --,并在中文前加字符 u 即可.

例如:
(1)

  env.workspace= u"D:/python练习/new.gdb.教育设施"

(2)

facility = arcpy.ListFeatureClasses()
     for faci in facility:
     name = faci+u"服务区"

详解
ASCII码:设计之初,就只想到在美国的小范围圈子用,表示编程常用到的数字,大小写的英文字母等,128个。
Unicode:不同的语言就需要不同的字符来表示。当初26个英文字母大小写,在加上些数字以及符号,用128个就够了。但是,如果推向世界,拿中文来说,中文每个汉字就需要每个不同的符号来表示。所以这时候就需要把范围扩大,扩大后就是Unicode,就像它的英文名,表示能表示所有字符。Unicode是好,但是占用的内存也大。原来用四分之一存储空间的ASCII码就能表示英文,但是用Unicode表示也是英文,但是内存却涨了一倍。所以需要优化。这就又有了utf-8。
utf-8:特点是,可以根据需要,该用多少就用多少,能有效减少内存的占用。
gbk : 中文专属的编码。

Python中默认编码方式是Unicode。其它类型的编码想正常输出就需要通过decode和encode两种方式进行转。例如:内容是utf-8格式,打印出来是乱码,需要通过decode.(‘utg-8’)解码为Unicode,然后再通过encode.(‘gbk’)的方式编码为gbk,才能显示为中文。

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以你看到很多网页的源码上会有类似’charset='utf-8’的信息,表示该网页是用的UTF-8编码

编码类型琐碎问题:

1、若本身字符为unicode 类型,显示中文可以使用:

a="abcc\\u8fdd\\u6cd5\\u8fdd\\u89c4"
print a.decode('unicode-escape')

2、使用chardet包下的detect方法检测字符编码:

a = '中国'
print chardet.detect(a)

结果为:{‘confidence’: 0.7525, ‘language’: ‘’, ‘encoding’:‘utf-8’}

3、在读取本地文字作为url一部分时,通常会出现编码错误,可使用:

for row in readCSV:
    a = row[0]
    quoteA = urllib.quote(a.decode('gbk').encode('utf-8'))
url = 'https://restapi.amap.com/v3/geocode/geo?address=' + quoteA +     '&key=a0325cbd9f7ab7eeb1bdb16ca78922b2'
print url

猜你喜欢

转载自blog.csdn.net/qq_39967296/article/details/89441765