2021年1月25日月曜日

APISpec の to_yaml で日本語が文字化けする場合の対処方法

概要

定義した spec 内で日本語を使っている場合は to_yaml を使わずに yaml.dump を使いましょう
to_yaml は内部的には yaml.dump を使っていますがオプションが使えないようになっています

環境

  • macOS 11.1
  • Python 3.8.7
    • apispec 4.0.0

文字化けするコード

with open(file_path, mode='w') as f:
    f.write(spec.to_yaml())

yaml.dump を使う

import yaml

with open(file_path, mode='w') as f:
    yaml.dump(spec.to_dict(), f, allow_unicode=True)


allow_unicode=True を忘れずに設定してください

おまけ: OrderedDict が入っている場合

to_dict した dict 内に OrderedDict が入っている場合以下の処理を追加しましょう

import yaml
from collections import OrderedDict

with open(file_path, mode='w') as f:
    represent_dict_order = lambda self, data:  self.represent_mapping("tag:yaml.org,2002:map", data.items())
    yaml.add_representer(OrderedDict, represent_dict_order)
    yaml.dump(spec.to_dict(), f, allow_unicode=True)

参考サイト

0 件のコメント:

コメントを投稿