2017-11-17 3 views
1

저는 파이썬 놈입니다. 문제가 무엇인지 여기에서 이해하고 있습니다. URL로 인코딩 된 문자열을 디코딩하고 있습니다. 나는 파일 dump®.txt (주요한 공간이 거기에있다)을 가지고있다. 내가 기대 한urllib.unquote_plus는 동일한 문자열에 다른 결과를 제공합니다.

>>> string1 = u'+dump%C2%AE.txt' 
>>> print urllib.unquote_plus(string1) 
dump®.txt 

>>> string2 = '+dump%C2%AE.txt' 
>>> print urllib.unquote_plus(string2) 
dump®.txt 

string1string2 (또는 어쩌면 반대 행동)에 대해서만 ® 문자를보고했다 : 내 개체 유형을 변경할 때, 나는 두 개의 서로 다른 결과를 얻을 수 있습니다. 아무도 내가 왜 string1 문자열 형식이 될 필요가 내 이해를 도울 수 전에 내 원하는 dump®.txt 얻을?

+0

* URL 인코딩 된 문자열을 utf-8로 디코딩 해요. <- 아니야. utf-8은 인코딩입니다. – wim

답변

0

아무도 내가 dump®.txt을 얻기 전에 string1이 문자열 유형이어야하는 이유를 이해할 수 있습니까?

urllib URL은 유니 코드를 지원하지 않으므로 urls에는 정의에 따라 ASCII 문자가 포함될 수 있습니다. 유니 코드 객체를 전달하면 올바른 일을 시도하는 일부 crappy code in Python 2이 있으며 버그가 있습니다.

유니 코드 개체를 urllib.unquote (으)로 전달하는 것은 사용자 오류입니다. 그렇게하지 마십시오. 이것은 맞습니다 :

print urllib.unquote_plus(string1.encode()) 
+0

고마워요! 그건 내가 urllib 워드 프로세서에서 기대하고있는 포기이지만 추적 할 수는 없다. – kristaps

관련 문제