python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成ascii编码了。英文字符能正常显示可读字符。

原因:json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串。

可行的方式如下:

import os
import os.path
import io
import sys
import json

contentByPage = {}
contentByPage['document'] = shortName
contentByPage['content'] = text
contentByPage['pageNumber'] = pageNumber
jsonFile = io.open(shortName+"--"+str(pageNumber)+".json",'w', encoding='utf8')
jsonFile.write(json.dumps(contentByPage, ensure_ascii=False).decode('utf8'))
jsonFile.flush()
jsonFile.close()