確かに、ジョブに適したツールを使用して、json
モジュールにデータをPythonにデコードするように依頼してくださいunicode
。次に、結果をUTF-8にエンコードします。
import json
json.loads(input).encode('utf8')
unicode-escape
実際のPython文字列リテラルにのみ使用してください。JSON文字列は、一見非常に似ているように見えますが、Python文字列と同じではありません。
短いデモ(Pythonインタラクティブインタープリターが文字列をリテラルとしてエコーすることを考慮に入れてください):
>>> json.loads(r'"\u201cquotes\u201d"').encode('utf8')
'\xe2\x80\x9cquotes\xe2\x80\x9d'
>>> json.loads(r'"foo\r\nbar"').encode('utf8')
'foo\r\nbar'
JSONデコーダーはPythonリテラルと同じようにデコード\r
することに注意してください。\n
JSON入力のUnicodeリテラルのみを処理する必要があり、残りはそのままにしておく必要がある場合は、正規表現を使用する必要があります。\uabcd
import re
codepoint = re.compile(r'(\\u[0-9a-fA-F]{4})')
def replace(match):
return unichr(int(match.group(1)[2:], 16))
codepoint.sub(replace, text).encode('utf8')
これは次のようになります。
>>> codepoint.sub(replace, r'\u201cquotes\u201d').encode('utf8')
'\xe2\x80\x9cquotes\xe2\x80\x9d'
>>> codepoint.sub(replace, r'"foo\r\nbar"').encode('utf8')
'"foo\\r\\nbar"'