実現したいこと
Pythonのloggingを使い、ログ出力をしようとしています。
RotatingFileHandlerを以下のように使っているのですが、encoding='utf-8' を指定しているにも関わらず、出力されたファイルの日本語部分が '\u5929\u6c17\u4e88\u5831' のようになってしまいます。
なお下記のソースコードにあるように、ロガーを取得している側のソースコード、およびログ出力を行っている側のソースコードの双方に "#coding: utf-8" を入れています。
何が原因か分かりません。ご助言よろしくお願いいたします。
前提
Python 3.10.9
該当のソースコード
Python
1# coding: utf-8 2(省略) 3mylog = logging.getLogger(name) 4rfh = logging.handlers.RotatingFileHandler( filepath, encoding = 'utf-8', mode = 'a', maxBytes = 52428800, backupCount = 5) 5rfh.setFormatter(logging.Formatter(LOG_FORMAT_ACTIVITY)) 6mylog.addHandler(rfh)
試したこと
出力されたログファイルの文字コードを、VSCodeで開くとエンコーディングはUTF-8として表示されたので、Encodingを変えて表示してみましたが、変わりません。
> '\u5929\u6c17\u4e88\u5831' のようになってしまう
これは具体的にどのような(エディタなどの)手段で確認したでしょうか?
また確認環境のOSは(フォントなど)日本語に対応しているでしょうか?
また変数LOG_FORMAT_ACTIVITYに日本語が含まれている場合、定義元のソースファイルのエンコーディングもUTF-8ででしょうか
ありがとうございます。情報が十分でなく申し訳ございません。
・確認したエディタ
Eclipse General Editor (ファイルのプロパティ Text file encoding は UTF-8 になっています)
VS Code(自動的に表示されたエンコーディングは UTF-8で、エンコーディングをShift-JISなどに変更しても変わりません)
・OSはWindows10 日本語環境です。
・変数 LOG_FORMAT_ACTIVITY には日本語は含めていません。LOG_FORMAT_ACTIVITY = '%(message)s'
またその定義元のソースコードには '#coding: utf-8' があります。
よろしくお願いいたします。
'\u5929\u6c17\u4e88\u5831'=「天気予報」ですが
おそらくログ出力しているもともとの文字列自体がユニコードエスケープ形式になっていると思われます。
ログ出力部分のコードも提示すると回答得られやすくなるかと思います。
ありがとうございます、大変助かりました!
ご推察通り、ログ出力部分でloggerに渡す前に文字化けしていました。
loggerに渡す文字列をjson.dumps()で生成しているのですが、そこに ensure_ascii=False を指定する必要があるようです。
日本語をログに出すことがなかったので、まったく気づいていませんでした。
回答1件
あなたの回答
tips
プレビュー