Windows 용 중복 파일 찾기를 만들려고합니다. 내 프로그램은 Linux에서 잘 작동한다. 그러나 NUL 문자를 Windows의 로그 파일에 씁니다. 이것은 Windows의 MBCS 기본 파일 시스템 인코딩 때문이며 Linux에서는 파일 시스템 인코딩이 UTF-8이기 때문입니다. 이 오류를 피하기 위해 MBCS를 UTF-8로 변환하려면 어떻게해야합니까?MBCS to UTF-8 : 파이썬으로 인코딩하는 방법
답변
파이썬이 로그 파일에서 UTF-8을 사용하도록 알려줍니다. 파이썬 3에서 당신은이 작업을 수행 :
open(..., encoding='utf-8')
당신이 문자열 인코딩 전환 할 수 있습니다 UTF-8로 MBCS 문자열을 변환 할 경우
filename.encode('mbcs').decode('utf-8')
사용 filename.encode(sys.getdefaultencoding())...
리눅스의 코드를 작동하게하기를, 게다가.
내가 utf-8을 사용하고 있는데, probem은 os.scandir()을 사용하면 MBCS가 DirEntry 이름과 동등한 결과를 얻는다. 나는 UTF-8이어야한다. –
sys.getdefaultencoding()은 무엇을 말하고 있는가? – zmbq
LINUX에서 UTF-8을 실행하는 동안 Windows에서 MBCS를 반환합니다. –
Windows 파일 API는 기본적으로 UTF-16 (실제로는 UCS-2)이므로 유니 코드를 사용해야합니다 (예 : 'os.listdir (u '.')'. 그런 다음 로그 파일에 쓰려면'io.open'을'encoding = 'utf-8'과 함께 사용하십시오. 이와 같이 텍스트는''mbcs ''(ANSI)로 인코딩되어서는 안됩니다. – eryksun
python3.5에서 실제로 os.scandir() (3.4까지 사용 가능)은 UTF-8이어야하는 DirEntry.name에 해당하는 MBCS를 반환합니다. –
아니요, os.scandir은 경로를 전달하면 유니 코드를 반환합니다. 유니 코드 문자열로. 'bytes' 경로는 Windows 3.5에서도 허용되지 않습니다. 3.6으로 업그레이드하면 Windows에서 바이트 경로의 파일 시스템 인코딩으로 UTF-8을 사용하도록 os 모듈의 기능을 정밀 검사했기 때문에 바이트 경로를 다시 사용할 수 있습니다. 내부적으로 3.6은 UTF-16 (즉, Windows 유니 코드 API)과 UTF-8 (바이트 소비자) 간의 코드 변환을 처리합니다. – eryksun