Windows에서 유니 코드 명령 행 인자를 읽을 수 있도록 Python 스크립트를 만들고 싶습니다. 그러나 sys.argv는 유니 코드가 아닌 일부 로컬 인코딩으로 인코딩 된 문자열입니다. 전체 유니 코드로 명령 줄을 읽으려면 어떻게해야합니까?Windows의 Python 2.x에서 명령 행 인자에서 유니 코드 문자 읽기
는예제 코드 :
C:\temp>argv.py "PC・ソフト申請書08.09.24.doc"
PC・ソフト申請書08.09.24.doc
<type 'str'>
50438145835c83748367905c90bf8f9130382e30392e32342e646f63
<open file 'PC・ソフト申請書08.09.24.doc', mode 'r' at 0x00917D90>
그의 시프트-JIS 내가 생각 인코딩, 그리고 "작품"그것에 대해 : 일본어 코드 페이지 설정 내 PC에 argv.py
import sys
first_arg = sys.argv[1]
print first_arg
print type(first_arg)
print first_arg.encode("hex")
print open(first_arg)
, 내가 얻을 파일 이름.
C:\temp>argv.py Jörgen.txt
Jorgen.txt
<type 'str'>
4a6f7267656e2e747874
Traceback (most recent call last):
File "C:\temp\argv.py", line 7,
in <module>
print open(first_arg)
IOError: [Errno 2] No such file or directory: 'Jorgen.txt'
주 - 난 3.0 파이썬, 파이썬 2.X에 대해하지 말 :하지만 설정 최종 "열기"호출이 실패하려면 Shift-JIS 문자가 아닌 문자로 파일 이름을 바꿈. 나는 파이썬 3.0이 적절한 유니 코드 인 sys.argv
을 제공한다는 것을 발견했다. 그러나 아직 파이썬 3.0으로 전환하기에는 아직 시기상비가 있습니다 (타사 라이브러리 지원이 없기 때문에).
업데이트 : 몇 가지 답변 내가 sys.argv
가 인코딩됩니다 무엇에 따라 디코딩한다 말한 그의 문제는 그것이 아니라 전체 유니 코드입니다 그래서 일부 문자는 표현할 수없는 것입니다
..
나를 슬프게하는 유스 케이스는 다음과 같습니다. enabled drag-and-drop of files onto .py files in Windows Explorer입니다. 시스템 기본 코드 페이지에없는 문자를 포함하여 모든 종류의 문자가 포함 된 파일 이름이 있습니다. 내 Python 스크립트는 현재 코드 페이지 인코딩에서 문자를 표현할 수없는 모든 경우에 sys.argv를 통해 전달되는 올바른 유니 코드 파일 이름을 얻지 못합니다.
전체 유니 코드로 명령 줄을 읽는 Windows API가 있습니다 (Python 3.0에서는이 기능을 제공합니다). 나는 파이썬 2.x 인터프리터가 그것을 사용하지 않는다고 가정한다.
는 일본어 Windows는 기본적으로 콘솔에 래스터 글꼴을 사용합니까? 이렇게하면 Windows-932 코드 페이지에 문자를 표시하는 데 제한 될 수 있습니다. http://support.microsoft.com/kb/Q99795를 참조하십시오 (이것은 args를 읽는 것에 대한 별도의 문제이지만 약간의 영향을 미칠 수 있습니다) – McDowell
Stack Overflow에서이 질문을 확인하면 질문에 대한 답을 제공해야합니다. http://stackoverflow.com/questions/477061/how-to-read-unicode-input-and-compare-unicode-strings-in-python – AlbertoPL
예, 정확한 dup 인 것으로 보입니다. –