Windows에서 Python 프로그램에 일본어 인수를 전달할 때의 깨짐과 대책

깨진 문제



오랜만에 Windows에서 파이썬 스크립트를 작성했습니다. 보안 규정에서 명령 프롬프트를 사용할 수 없으며 Python 스크립트를 시작하려면 Windows 일괄 처리를 사용해야 합니다. 파라미터로서 일본어의 문자열을 건네줍니다만, Python 프로그램내에서는 ( sys.argv 의 내용) 문자 깨져 버리는 사건이었습니다.
%echo off
C:\python.exe hogehoge.py "あいうえお"
set /p confirm="Enter."

파이썬 프로그램으로 표준 출력에 씁니다.
# -*- 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."

이상이 됩니다. 같은 문제에 있던 사람에게 도움이 되었으면 좋겠습니다.

좋은 웹페이지 즐겨찾기