要件
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の「Portable Python」に含まれています。
- このバージョンはより優れた Unicode サポートを提供するため、Python 3+ を使用していることを確認してください。
問題
json.dumps() は Unicode 文字をエスケープします。
解決
一番下のアップデートを読んでください。または...
エスケープされた各文字を、解析された Unicode 文字に置き換えます。
まさにそれを行うという単純なラムダ関数を作成しました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"}'