filesystemencoding을 사용하여 바이트 코드를 유니 코드로 디코딩하는 것은 홈 디렉토리의 경로가 실제로 filesystemencoding에서 표현 가능한 경우에만 작동합니다.
Windows에서 byte-string-file-path I/O에 사용되는 filesystemencoding은 로케일 종속적 인 'ANSI 코드 페이지'입니다. 불행하게도 UTF가 아니기 때문에 항상 사용할 수없는 문자가 있습니다. byte-string-file-path 함수로 표현됩니다. 따라서 예를 들어 사용자 이름에 일본어 문자가 포함되어 있지만 서유럽 Windows 설치 (코드 페이지 1252, ISo-8859-1과 유사)를 사용하는 경우 Martijn의 예는 실패합니다.
C 표준 라이브러리 바이트 문자열 기반 파일 입출력 기능을 사용하는 대부분의 언어에서이 기능이 끝납니다. Java 등에서는 ANSI 코드 외부에 문자가있는 파일에는 액세스 할 수 없습니다 페이지.
다행히 파이썬은 C 표준 라이브러리 대신 기본 Win32 API 호출을 사용하여 Windows의 유니 코드 파일 이름을 특정하게 지원합니다. 이를 사용하면 Windows에서 이해할 수있는 실제 유니 코드 파일 이름을 가져올 수 있으며,이를 바이트 문자열로 변환 한 후 손실되는 맹 글링을 피할 수 있습니다.
일반적으로 호출하려는 함수에 유니 코드 문자열을 전달하여 파이썬 2에서 유니 코드 파일 이름 지원을 트리거합니다. 파이썬은 응답으로 유니 코드 문자열을 반환합니다 :
>>> import os
>>> os.path.expanduser(u'~')
u'C:\\Users\\V\xe2nia'
'print os.path.expanduser ('~')'는 예상대로 작동하는 것 같습니다. 해석기는'repr'을 사용하여 결과를 표시합니다. – Eric
@ Eric : OP가 가리키는'\ xe2' 문자가 아니라''\\''백 슬래시입니다. –
@MartijnPieters : 그것은 문자열의 생성에 필요한 파이썬 리터럴을 생성하는 'repr'과 같은 또 다른 측면입니다. – Eric