WindowsでPythonプログラムへ日本語の引数を引き渡すときの文字化けと対策
文字化けの問題
久しぶり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()
解決方法
色々検索して、文字列(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."
以上になります。同じ問題にあった人に役に立てばと幸いです。
Author And Source
この問題について(WindowsでPythonプログラムへ日本語の引数を引き渡すときの文字化けと対策), 我々は、より多くの情報をここで見つけました https://qiita.com/tranvinhcuong/items/9dc905920905605bf31b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .