Written by razrlele
15:44 March 28, 2016
在Python 2.7里面字符编码似乎是一个很令人烦躁的问题,最近在处理抓取的数据时候碰到了一些问题,在这里记录一下:
抓取的数据中中文字符是以utf8
编码json
格式存储,如下所示:
1 2 3 |
[{ "hello":"\u4e16\u754c" }] |
然而编码是无法直接阅读的,为了检查抓取下来的数据,我还是得需要将其转换成中文字符,这里根据Stackoverflow上的一个回答可以按照如下方式解决:
1 |
json_file.write(json.dumps(result,indent=1).decode('unicode-escape').encode('utf8')) |
就是将数据用json.dumps过后先从unicode-escape
解码,然后再以utf8
格式编码存储,数据写入到输出文件过后如下:
1 2 3 4 5 |
[ { "hello": "世界" } ] |
在那个回答里面还有人提供了另外一种处理方法:
1 2 3 |
with io.open('filename', 'w', encoding='utf8') as json_file: data = json.dumps(d, ensure_ascii=False, encoding='utf8') json_file.write(unicode(data)) |
但是我在处理中文数据的时候依旧会报UnicodeEncodeError
:
1 |
UnicodeEncodeError: 'ascii' codec can't encode characters in position 17-18: ordinal not in range(128) |
字符encode来decode去真是一件头疼的事情,先记着,里边儿的原理后日再深究。