要求
确保您的 python 文件以 UTF-8 编码。否则你的非 ASCII 字符会变成问号,?
. Notepad++ 为此提供了出色的编码选项。
确保包含适当的字体。如果要显示日文字符,则需要安装日文字体。
确保您的 IDE 支持显示 Unicode 字符。否则你可能会UnicodeEncodeError
抛出一个错误。
例子:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 22-23: character maps to <undefined>
PyScripter 为我工作。它包含在http://portablepython.com/wiki/PortablePython3.2.1.1的“便携式 Python”中
- 确保你使用的是 Python 3+,因为这个版本提供了更好的 unicode 支持。
问题
json.dumps() 转义 unicode 字符。
解决方案
阅读底部的更新。或者...
用解析的 unicode 字符替换每个转义字符。
我创建了一个简单的 lambda 函数getStringWithDecodedUnicode
,它就是这样做的。
import re
getStringWithDecodedUnicode = lambda str : re.sub( '\\\\u([\da-f]{4})', (lambda x : chr( int( x.group(1), 16 ) )), str )
这getStringWithDecodedUnicode
是一个常规功能。
def getStringWithDecodedUnicode( value ):
findUnicodeRE = re.compile( '\\\\u([\da-f]{4})' )
def getParsedUnicode(x):
return chr( int( x.group(1), 16 ) )
return findUnicodeRE.sub(getParsedUnicode, str( value ) )
例子
testJSONWithUnicode.py(使用 PyScripter 作为 IDE)
import re
import json
getStringWithDecodedUnicode = lambda str : re.sub( '\\\\u([\da-f]{4})', (lambda x : chr( int( x.group(1), 16 ) )), str )
data = {"Japan":"日本"}
jsonString = json.dumps( data )
print( "json.dumps({0}) = {1}".format( data, jsonString ) )
jsonString = getStringWithDecodedUnicode( jsonString )
print( "Decoded Unicode: %s" % jsonString )
输出
json.dumps({'Japan': '日本'}) = {"Japan": "\u65e5\u672c"}
Decoded Unicode: {"Japan": "日本"}
更新
或者...只是ensure_ascii=False
作为 json.dumps 的选项传递。
注意:您需要满足我在开头概述的要求,否则这将不起作用。
import json
data = {'navn': 'Åge', 'stilling': 'Lærling'}
result = json.dumps(d, ensure_ascii=False)
print( result ) # prints '{"stilling": "Lærling", "navn": "Åge"}'