2016-11-16 4 views
2

나는 파이썬 2.7.12와 함께 일하고있다 유니 코드 리터럴이 유니 코드 형식이 아닌 문자열이 있습니다. 이것을 텍스트로 변환하고 싶습니다. 이 예제는 내가하려고하는 것을 설명합니다.파이썬 2.7, ASCII로 utf8 문자열을 변환

>>> s 
'\x00u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00' 
>>> print s 
username 
>>> type(s) 
<type 'str'> 
>>> s == "username" 
False 

어떻게이 문자열을 변환합니까?

답변

1

빅 엔디안이든 리틀 엔디안이든 (사용자가 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은 엔디안을 알아낼 방법 또는 짝수 바이트를 얻으려면, 당신은 속일 수 걸린 것으로 예상되는 것을 지정하는 오류를 숨기십시오.