python json unicode utf-8処理まとめ
3978 ワード
1.直接出力辞書中国語pythonで直接print dict(辞書)に遭遇したり、dictがjsonを回転したりすることがよくありますが、特定のパラメータを与えずにjson文字列を印刷し、出力した中国語がunicodeコードになった場合、以下のようにします.
出力結果:
この状況はどうしますか.辞書の中国語の正しい出力を行うには、dをjson文字列に変換し、変換時にjsonを使用することができる.dumps(d, ensure_ascii=False, encoding='utf-8'))
出力結果:
パラメータensure_ascii=Falseは少なくできません.encodingは省略できます.デフォルトはencoding='utf-8'です.パラメータensure_についてです.asciiの解釈:
パラメータencodingの説明について:
2.pythonが持参するjsonライブラリでjsonを辞書出力に変換し、出力はunicodeコードでjsonを使用する.loads(json_str)はjson_str文字列を辞書に変換する場合、辞書の内容はunicodeコードで、具体的には以下の通りです.
出力結果:
辞書の文字列に付いているuは、uを取り除くには、yamlライブラリのyamlを使用する方法が2つあります.safe_load(jd)
結果は次のように出力されます.
視覚が鋭い学生は、2番目のnameの値の前にuがあることを発見する可能性があります.つまり、彼はunicodeコードです.確かに、上の第1点はすでに説明して、直接辞書を印刷して、辞書の中の中国語は文字化けして、しかしどうしてunicodeコードで、もっと深い分析が必要で、知っている友达が伝言を惜しまないことを望んで、ありがとうございます.
bトランスコード関数を再帰的に実現するjson.loads()が返す辞書はunicodeコードから自分の欲しいコードに変換され、以下のように実現される.
使用例:
出力結果は次のとおりです.
今回は徹底的にjsonをloads()が返す辞書変換コードはutf-8になりましたが、出力はなぜ文字化けしているのでしょうか.冒頭の最初の点で言ったように、直接print辞書では、中国語は文字化けしますが、print ud['name']は正常に中国語の'張三'を表示します.参照元:https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-from-json
d = {'name': ' ', 'age': '1'}
print d
jd = json.dumps(d)
print jd
出力結果:
{'age': '1', 'name': '\xe5\xbc\xa0\xe4\xb8\x89'}
{"age": "1", "name": "\u5f20\u4e09"}
この状況はどうしますか.辞書の中国語の正しい出力を行うには、dをjson文字列に変換し、変換時にjsonを使用することができる.dumps(d, ensure_ascii=False, encoding='utf-8'))
d = {'name': ' ', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
print jd
出力結果:
{'age': '1', 'name': '\xe5\xbc\xa0\xe4\xb8\x89'}
{"age": "1", "name": " "}
パラメータensure_ascii=Falseは少なくできません.encodingは省略できます.デフォルトはencoding='utf-8'です.パラメータensure_についてです.asciiの解釈:
If ``ensure_ascii`` is true (the default), all non-ASCII characters in the
output are escaped with ``\uXXXX`` sequences, and the result is a ``str``
instance consisting of ASCII characters only. If ``ensure_ascii`` is
``False``, some chunks written to ``fp`` may be ``unicode`` instances.
This usually happens because the input contains unicode strings or the
``encoding`` parameter is used. Unless ``fp.write()`` explicitly
understands ``unicode`` (as in ``codecs.getwriter``) this is likely to
cause an error.
パラメータencodingの説明について:
``encoding`` is the character encoding for str instances, default is UTF-8.
2.pythonが持参するjsonライブラリでjsonを辞書出力に変換し、出力はunicodeコードでjsonを使用する.loads(json_str)はjson_str文字列を辞書に変換する場合、辞書の内容はunicodeコードで、具体的には以下の通りです.
ud = json.loads(jd, encoding='utf-8')
print ud
出力結果:
{u'age': u'1', u'name': u'\u5f20\u4e09'}
辞書の文字列に付いているuは、uを取り除くには、yamlライブラリのyamlを使用する方法が2つあります.safe_load(jd)
import yaml
d = {'name': ' ', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
ud = json.loads(jd, encoding='utf-8')
print ud
ud = yaml.safe_load(jd, encoding='utf-8')
print ud
結果は次のように出力されます.
{u'age': u'1', u'name': u'\u5f20\u946b'}
{'age': '1', 'name': u'\u5f20\u946b'}
視覚が鋭い学生は、2番目のnameの値の前にuがあることを発見する可能性があります.つまり、彼はunicodeコードです.確かに、上の第1点はすでに説明して、直接辞書を印刷して、辞書の中の中国語は文字化けして、しかしどうしてunicodeコードで、もっと深い分析が必要で、知っている友达が伝言を惜しまないことを望んで、ありがとうございます.
bトランスコード関数を再帰的に実現するjson.loads()が返す辞書はunicodeコードから自分の欲しいコードに変換され、以下のように実現される.
def byteify(input, encoding='utf-8'):
if isinstance(input, dict):
return {byteify(key): byteify(value) for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode(encoding)
else:
return input
使用例:
d = {'name': ' ', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
ud = json.loads(jd, encoding='utf-8')
print ud
ud = byteify(ud)
print ud
print ud['name']
出力結果は次のとおりです.
{u'age': u'1', u'name': u'\u5f20\u946b'}
{'age': '1', 'name': '\xe5\xbc\xa0\xe9\x91\xab'}
今回は徹底的にjsonをloads()が返す辞書変換コードはutf-8になりましたが、出力はなぜ文字化けしているのでしょうか.冒頭の最初の点で言ったように、直接print辞書では、中国語は文字化けしますが、print ud['name']は正常に中国語の'張三'を表示します.参照元:https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-from-json