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