[解決済み] json.dumpsでutf-8テキストを保存する場合、UTF8として保存し、 \uエスケープシーケンスとして保存しない。
2022-03-15 18:52:04
質問
サンプルコードです。
>>> import json
>>> json_string = json.dumps("ברי צקלה")
>>> print(json_string)
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"
問題は、人間が読めるものではないことだ。私の(賢い)ユーザーは、JSONダンプでテキストファイルを検証したり、編集したりしたいのです(XMLは使いたくないし)。
オブジェクトをUTF-8のJSON文字列にシリアライズする方法はありますか?
\uXXXX
)?
解決方法は?
を使用します。
ensure_ascii=False
スイッチで
json.dumps()
を指定し、その値を手動でUTF-8にエンコードしてください。
>>> json_string = json.dumps("ברי צקלה", ensure_ascii=False).encode('utf8')
>>> json_string
b'"\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94"'
>>> print(json_string.decode())
"ברי צקלה"
ファイルに書き込む場合は、単に
json.dump()
で、エンコードはファイルオブジェクトに任せます。
with open('filename', 'w', encoding='utf8') as json_file:
json.dump("ברי צקלה", json_file, ensure_ascii=False)
Python 2の注意点
Python 2 の場合、さらにいくつかの注意点があります。これをファイルに書き出す場合は
io.open()
代わりに
open()
を使用して、書き込み時に Unicode 値をエンコードするファイル オブジェクトを生成します。
json.dump()
の代わりに、そのファイルに書き込むようにします。
with io.open('filename', 'w', encoding='utf8') as json_file:
json.dump(u"ברי צקלה", json_file, ensure_ascii=False)
があることに注意してください。
のバグを修正しました。
json
モジュール
ここで
ensure_ascii=False
フラグを使用すると
まぜかえす
の
unicode
と
str
オブジェクトを使用します。 Python 2 での回避策は、次のとおりです。
with io.open('filename', 'w', encoding='utf8') as json_file:
data = json.dumps(u"ברי צקלה", ensure_ascii=False)
# unicode(data) auto-decodes data to unicode if str
json_file.write(unicode(data))
Python 2 では、バイト文字列 (タイプ
str
をUTF-8にエンコードしている場合は、必ず
encoding
というキーワードがあります。
>>> d={ 1: "ברי צקלה", 2: u"ברי צקלה" }
>>> d
{1: '\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94', 2: u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'}
>>> s=json.dumps(d, ensure_ascii=False, encoding='utf8')
>>> s
u'{"1": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4", "2": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"}'
>>> json.loads(s)['1']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> json.loads(s)['2']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> print json.loads(s)['1']
ברי צקלה
>>> print json.loads(s)['2']
ברי צקלה
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み】pip install mysql-python は EnvironmentError: mysql_config not found で失敗します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
python implement mysql add delete check change サンプルコード
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].