빅 엔디안이든 리틀 엔디안이든 (사용자가 BOM이없고 앞뒤 NUL 바이트가있어 길이가 일정하지 않음) UTF-8이 아니라 UTF-16이 아닙니다. ASCII 범위의 텍스트의 경우 UTF-8은 ASCII와 구별 할 수 없지만 UTF-16은 NUL 바이트를 ASCII 인코딩 된 바이트로 바꿉니다 (예에서와 같이). 사용자의 입력이 단지 NUL은 ASCII를 산재하고 당신이 할 수있는 경우,
s = 'u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00' # I removed \x00 from beginning manually
sascii = s.decode('utf-16-le').encode('ascii')
# Or without manually removing leading \x00
sascii = s.decode('utf-16-be', errors='ignore').encode('ascii')
코스 : 일반 ASCII로 변환 어떤 경우
, 당신은 단지 고르지 길이 어떤 식 으로든 처리 할 필요 상당히 간단합니다
sascii = s.replace('\x00', '')
을하지만 수 있으므로 즉, 입력이 어떤 완전히 다른 인코딩 인 경우에 예외를 발생하지 않습니다 't은 엔디안을 알아낼 방법 또는 짝수 바이트를 얻으려면, 당신은 속일 수 걸린 것으로 예상되는 것을 지정하는 오류를 숨기십시오.