百度了很久,setdefaultencoding的作用说是encode之前会用默认的编码方式先解码
第一种方式报错
datas = json.loads(datas)
name = datas['data']['travel'][0]['surname']
name = urllib.unquote(name).decode('utf-8').encode('raw-unicode-escape')
报错信息
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
第二种不报错
import sys
reload(sys)
sys.setdefaultencoding('utf8')
name = datas['data']['travel'][0]['surname']
name = urllib.unquote(name).encode('raw-unicode-escape')
直接指明decode的解码方式为什么不行?
decode('utf-8')的作用和# -*- coding: UTF-8 -*-这个声明的作用是一样的吗?
encode之前默认的解码,和decode的解码不是一个东西?
第一个方法报错的原因是name 不是标准的utf8,可能混合了别的字符
sys.setdefaultencoding('utf8')和# -*- coding: UTF-8 -*-这个声明的作用是一样的
设置的是文件内容的编码
decode('utf-8')是按照UTF-8来进行字符串的解码
但是不代表解码的字符串一定是UTF-8的,如果解码的字符串不是UTF-8的 就可能报错 或者出现乱码