App Service ( Windows Container ) にデプロイしたPythonアプリの標準出力について、日本語が文字化けするので解決したい

takezawa_skk 0 評価のポイント
2025-06-09T05:45:35.3633333+00:00

<質問>

App Service ( Windows Container ) にデプロイしたPythonアプリの標準出力について、日本語が文字化けするので解決する方法はありますか?

<環境>

(App Service)

  • 利用サービス: Web App for Containers
  • OS: Windows
  • アプリフレームワーク: Flask
  • アプリ言語: Python3.12
  • ビルドツール: Docker(イメージ:mcr.microsoft.com/windows/servercore:ltsc2022)
  • ビルド補佐ツール:Azure Container Registry
  • 標準出力、標準エラー出力の参照先:App Service( Azure Portal )/監視/ ログ/ AppServiceConsoleLogs
  • 標準出力、標準エラー出力状況: 正常に出力されている。英語は問題なく出力済み
  • デプロイ状況: 正常(ブラウザで確認済み)
  • 文字化け状況: 日本語がUnicodeエスケープされている(下記例参照)

(例)

logger.info("これはテストです")
↓
INFO:__main__:\u3053\u308c\u306f\u30c6\u30b9\u30c8\u3067\u3059

(デプロイアプリ)

検証のために簡易的なFlaskアプリにしてます

--app.py--

import logging
from logging import StreamHandler

from flask import Flask

app = Flask(__name__)

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
streamHandler = StreamHandler()
app.logger.addHandler(streamHandler)


@app.route("/")
def hello():
    logger.info("これはテストです")
    logger.info("This is test.")
    return "Hello, Flask"


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

<検証したこと>

  • ローカルにて上記Dockerコンテナーを起動させ、Powershell, CMDにて日本語の出力及びPython経由からの日本語出力は正常確認済み
  • 上記アプリをApp Service ( Linux )にデプロイして、標準出力と標準エラー出力について日本語出力できたことは正常確認済み
  • App Serviceの環境変数設定(Portalにて、(設定/ 環境変数))は以下実施済み (Dockerfileにも同じようにENVを実施済み)
  • LANG: en_US.UTF-8とja_JP.UTF-8  →影響なし
  • LOCALE: en_US.UTF-8,とja_JP.UTF-8  →影響なし
  • PYTHONUTF8=1  →日本語が???に変化
  • PYTHONIOENCODING=utf-8 →日本語が???に変化
  • PYTHONIOENCODING=shift_jis, cp932 →アプリが立ち上がらなくなる

<認識していること>

  • App Service(Windows)ではPythonをサポートしていない
  • App Service(Windows)のJapaアプリでも日本語の文字化け防止のために環境変数の設定が必要であった

参照

<解決の推測>

エラーの原因は、App Service(Windows)側でPythonの日本語を認識できないことだと思います。方法として考えているのは、App Service側の環境変数設定か、Azure InsightsをFlask側で操作することです。

  • アプリの内容→きわめてシンプルですので、エラー原因はないと思います
  • Docker→コンテナ内で日本語が正常に出力できてたので、エラー原因ではないと思います
Azure SQL Database
Azure SQL Database
Azure リレーショナル データベース サービス。
{count} 件の投票

1 件の回答

並べ替え方法: 最も役に立つ
  1. Bhargavi Naragani 7,940 評価のポイント Microsoft 外部スタッフ モデレーター
    2025-06-09T10:13:37.1733333+00:00

    Hi takezawa_skk,

    アプリサービス(Windowsコンテナ)は、デフォルトでは日本語のような非ラテン文字に対してコンソールでUnicode出力を正しく解釈しません。それらをエスケープします(例:これ)なぜなら、基になるPowerShellまたはCMDプロセスのエンコーディングが非Unicodeコードページ(437または1252など)にデフォルト設定されているからです。また、Azureポータル上のアプリサービスコンソールログビューアは、基になるWindowsプロセスから書き込まれたログをそのまま表示するため、デフォルトではUTF-8をうまく処理しません。

    この状況での最善の回避策は、Pythonロガーにエスケープされた文字列ではなくデコードされたユニコードを出力させることです。次のようにすることができます:
    StreamHandlerを更新して、UTF-8を明示的に扱うOutputStreamを使用します。app.pyを次のように修正してください:

    import sys
    import logging
    from logging import StreamHandler
    from flask import Flask
    app = Flask(__name__)
    # Ensure UTF-8 output
    stream_handler = StreamHandler(sys.stdout)
    stream_handler.setFormatter(logging.Formatter('%(message)s'))
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    logger.addHandler(stream_handler)
    @app.route("/")
    def hello():
        logger.info("これはテストです")
        logger.info("This is test.")
        return "Hello, Flask"
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=8000)
    

    これは日本語のテキストをそのまま出力し、エスケープしません。

    コンテナが mcr.microsoft.com/windows/servercore:ltsc2022 を使用している場合でも、システムロケールが UTF-8 と互換性があることを確認してください。Dockerfile に次を追加します:

    # Set system locale to Japanese + UTF-8
    RUN powershell -Command "Set-WinSystemLocale ja-JP"
    RUN setx PYTHONIOENCODING utf-8
    

    注: setxはコンテナセッション内で環境変数を永続化します。

    また、アプリを実行する前にコンテナ内でコードページを強制してみてください:

    CMD chcp 65001 && python app.py
    

    chcp 65001 はコードページをUTF-8に切り替えます。

    AppServiceConsoleLogsが日本語をエスケープし続ける場合は、ログをファイルに書き込むか、UTF-8をサポートし、日本語コンテンツを適切に扱うApplication InsightsやAzure Monitorに送信することを検討してください。より良い可視性のために、OpenCensusを介してFlaskとApplication Insightsを統合できます。

    https://learn.microsoft.com/ja-jp/azure/app-service/troubleshoot-diagnostic-logs
    https://docs.python.org/3/howto/unicode.html#unicode-in-python-3
    https://learn.microsoft.com/ja-jp/powershell/module/international/set-winsystemlocale?view=windowsserver2025-ps
    https://learn.microsoft.com/ja-jp/previous-versions/azure/azure-monitor/app/opencensus-python

    回答が役に立った場合は、「回答を受け入れる」をクリックし、他の同様の問題に直面している人々が恩恵を受けられるように、ぜひアップボートしてください。

    他にご質問があればお知らせください。


お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "おすすめ" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。