LoginSignup
0
0

More than 1 year has passed since last update.

WindowsでPythonプログラムへ日本語の引数を引き渡すときの文字化けと対策

Last updated at Posted at 2021-08-26

文字化けの問題

久しぶりWindowsでPythonスクリプトを書くことになりました。セキュリティーの規制でコマンドプロンプトが使えなく、Pythonスクリプトを起動するにはWindowsバッチを使う必要があります。パラメーターとして日本語の文字列を渡すのですが、Pythonプログラム内では(sys.argvの中身)文字化けになってしまう事象でした。

%echo off
C:\python.exe hogehoge.py "あいうえお"
set /p confirm="Enter."

Pythonプログラムで標準出力に書く。

# -*- encoding: utf-8 -*-
import sys

def main():
    if len(sys.argv) > 1:
        print(sys.argv[1])

if __name__ == '__main__':
    main()

結果はこうなっています。
moijbake.png

解決方法

色々検索して、文字列(sys.argv)をencodeしたり、decodeしてみたりしたのですが、効果がなくまたはエラーになりました。

バッチファイルのエンコードとPythonスクリプトのエンコードの両方は UTF-8になっていて、なんで引き渡した後文字化けになっているか原因特定できていないのですが、恐らく文字列を引き渡すときに、エンコードに使っているエンコーディングはUTF-8でないのは確実かと思われます。それで、以下のようにバッチを修正して、コマンドプロンプトの環境のエンコーディング(Windowsではアクティブページ)をUTF-8にすると、うまく文字化けを解決しました。

%echo off
chcp 65001
C:\python.exe hogehoge.py "あいうえお"
set /p confirm="Enter."

以上になります。同じ問題にあった人に役に立てばと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0