文字化けの問題
久しぶり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."
以上になります。同じ問題にあった人に役に立てばと幸いです。