복붙노트

[PYTHON] 파이썬 : sys.argv 처리에 사용되는 인코딩은 무엇입니까?

PYTHON

파이썬 : sys.argv 처리에 사용되는 인코딩은 무엇입니까?

sys.argv의 어떤 인코딩이 파이썬에서 무엇입니까? sys.getdefaultencoding () 인코딩으로 인코딩 되었습니까?

추신 : 일부 답변에서 지적한 것처럼 sys.stdin.encoding은 실제로 더 나은 추측입니다. 하지만 솔리드 소스에 대한 정보를 가지고이 질문에 대한 확실한 답을 얻고 싶습니다.

PPS : Wim이 지적했듯이, Python 3은 str 객체를 sys.argv에 넣음으로써이 문제를 해결합니다 (올바르게 이해한다면). Python 2.x에서는 여전히 문제가 남아 있습니다. 유닉스에서, LC_CTYPE 환경 변수가 올바른지 검사하는 것인가? Windows에서해야 할 일 (sys.argv 요소가 콘솔이 무엇이든 올바르게 해석되도록)

해결법

  1. ==============================

    1."Windows에서해야 할 일 (sys.argv 요소가 콘솔과 상관없이 올바르게 해석되도록)?"

    "Windows에서해야 할 일 (sys.argv 요소가 콘솔과 상관없이 올바르게 해석되도록)?"

    Python 2.x의 경우 issue2128에 대한이 주석을 참조하십시오.

    일부 문자는 실행 취소 할 정보가 충분하지 않은 방식으로 변환 될 수 있으므로 원본 sys.argv에 대한 인코딩이 올바르지 않습니다 (예 : ANSI 코드 페이지가 그리스어 알파를 나타낼 수없는 경우 ' 에이'.)

  2. ==============================

    2.문제 2128에 닥쳤 기 때문에이 질문을하고있는 것 같습니다.이 문제는 Python 3.0에서 수정되었습니다.

    문제 2128에 닥쳤 기 때문에이 질문을하고있는 것 같습니다.이 문제는 Python 3.0에서 수정되었습니다.

  3. ==============================

    3.이것이 도움이되는지 아닌지는 모르지만 이것이 DOS 모드에서 얻은 것입니다.

    이것이 도움이되는지 아닌지는 모르지만 이것이 DOS 모드에서 얻은 것입니다.

    C:\Python27>python Lib\codingtest.py нер
    ['Lib\\codingtest.py', '\xed\xe5\xf0']
    
    C:\Python27>python Lib\codingtest.py hello
    ['Lib\\codingtest.py', 'hello']
    

    유휴 상태 :

    >>> print "hello"
    hello
    >>> "hello"
    'hello'
    >>> "привет"
    '\xef\xf0\xe8\xe2\xe5\xf2'
    >>> print "привет"
    привет
    >>> sys.getdefaultencoding()
    'ascii'
    >>> 
    

    우리가 이것으로부터 무엇을 추론 할 수 있습니까? 나는 아직 모른다 ... 나는 약간의 논평을 할 것이다.

    조금 나중에 : sys.argv는 sys.getdefaultencoding ()이 아닌 sys.stdin.encoding으로 인코딩됩니다.

  4. ==============================

    4.유닉스 시스템에서는 sys.getdefaultencoding에 묶이지 않은 (이상하게) 사용자의 로케일에 있어야한다. http://docs.python.org/library/locale.html을 참조하십시오.

    유닉스 시스템에서는 sys.getdefaultencoding에 묶이지 않은 (이상하게) 사용자의 로케일에 있어야한다. http://docs.python.org/library/locale.html을 참조하십시오.

    Windows에서는 시스템 ANSI 코드 페이지에 있습니다.

    (그런데, 전치사로 문장을 끝내지 말라고 말한 초등학교 교사는 거짓말 쟁이였습니다.)

  5. ==============================

    5.몇 가지 관찰 :

    몇 가지 관찰 :

    (1) 확실히 sys.getdefaultencoding이 아닙니다.

    (2) sys.stdin.encoding은 훨씬 더 나은 선택입니다.

    (3) Windows에서 sys.stdin.encoding의 실제 값은 stdio를 제공하는 소프트웨어에 따라 다릅니다. IDLE은 시스템 "ANSI"코드 페이지를 사용합니다. 대부분의 서유럽과 미국 및 그 이전 식민지에서 cp1252. 그러나 MS-DOS를 에뮬레이트하는 명령 프롬프트 창에서 해당 DOS 코드 페이지 (예 : cp850)가 기본적으로 사용됩니다. 이는 CHCP (코드 페이지 변경) 명령을 사용하여 변경할 수 있습니다.

    (4) 서브 프로세스 모듈에 대한 문서는 args와 stdout에 사용할 인코딩에 대한 제안을하지 않습니다.

    (5) sys.stdin.encoding == sys.stdout.encoding을 어설 션하는 하나의 트러스트는 결코 실패하지 않습니다.

  6. ==============================

    6.sys.getfilesystemencoding ()은 적어도 Windows에서 작동합니다. Windows에서는 실제로 'mbcs'이고, * nix에서는 'utf-8'입니다.

    sys.getfilesystemencoding ()은 적어도 Windows에서 작동합니다. Windows에서는 실제로 'mbcs'이고, * nix에서는 'utf-8'입니다.

  7. from https://stackoverflow.com/questions/4012571/python-which-encoding-is-used-for-processing-sys-argv by cc-by-sa and MIT license