<질문>
만약 내가한다면
url = "http://example.com?p=" + urllib.quote(query)
- 인코딩하지 않습니다
/
에게%2F
(OAuth 정규화 중단) - 유니코드를 처리하지 않습니다(예외 발생).
더 좋은 도서관이 있습니까?
<답변1>
urllib.quote(string[, safe])
%xx 이스케이프를 사용하여 문자열의 특수 문자를 바꿉니다. 문자, 숫자 및 문자 '_.-'는 인용되지 않습니다. 기본적으로 이 함수는 URL의 경로 섹션을 인용하기 위한 것입니다. 선택적 safe 매개 변수는 인용하면 안 되는 추가 문자를 지정합니다. 기본값은 '/'입니다.
통과한다는 뜻입니다''
~을 위한안전한첫 번째 문제를 해결할 것입니다.
>>> urllib.quote('/test')
'/test'
>>> urllib.quote('/test', safe='')
'%2Ftest'
두 번째 문제에 대해서는a bug report about it. 분명히 그것은 Python 3에서 수정되었습니다. 다음과 같이 인코딩하여 해결할 수 있습니다.UTF-8이와 같이:
>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller
그건 그렇고, 한번 봐봐urlencode.
파이썬 3에서 함수quote
로 이동되었습니다urllib.parse
:
>>> import urllib.parse
>>> print(urllib.parse.quote("Müller".encode('utf8')))
M%C3%BCller
>>> print(urllib.parse.unquote("M%C3%BCller"))
Müller
<답변2>
파이썬 3에서는urllib.quote
로 이동되었습니다urllib.parse.quote
, 그리고 그것은 처리 않습니다Unicode기본적으로.
>>> from urllib.parse import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
>>> quote('/El Niño/')
'/El%20Ni%C3%B1o/'
<답변3>
제 생각에는 모듈requests
훨씬 낫다. 그것은 기반urllib3
.
다음을 시도할 수 있습니다.
>>> from requests.utils import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
내 대답은 Paolo의 대답 과 비슷합니다.
<답변4>
당신이 사용하는 경우Django, 당신이 사용할 수있는urlquote:
>>> from django.utils.http import urlquote
>>> urlquote(u"Müller")
u'M%C3%BCller'
Python에 대한 변경 사항은 이것이 이제 레거시 래퍼임을 의미합니다. Django 2.1 소스 코드에서django.utils.http:
A legacy compatibility wrapper to Python's urllib.parse.quote() function.
(was used for unicode handling on Python 2)
<답변5>
사용하는 것이 좋습니다urlencode
여기. 단일 매개 변수에는 큰 차이가 없지만 IMHO는 코드를 더 명확하게 만듭니다. (함수 보기가 헷갈리네요.quote_plus
! - 특히 다른 언어에서 온 사람들.)
In [21]: query='lskdfj/sdfkjdf/ksdfj skfj'
In [22]: val=34
In [23]: from urllib.parse import urlencode
In [24]: encoded = urlencode(dict(p=query,val=val))
In [25]: print(f"http://example.com?{encoded}")
http://example.com?p=lskdfj%2Fsdfkjdf%2Fksdfj+skfj&val=34
<답변6>
다음을 사용하는 대체 방법furl:
import furl
url = "https://httpbin.org/get?hello,world"
print(url)
url = furl.furl(url).url
print(url)
산출:
https://httpbin.org/get?hello,world
https://httpbin.org/get?hello%2Cworld
'개발 > Python' 카테고리의 다른 글
[파이썬] 리스트에서 요소 찾아 바꾸기 (0) | 2023.01.21 |
---|---|
[파이썬] NotImplementedError 대신 NotImplemented를 반환하는 이유 (0) | 2023.01.21 |
[파이썬] 버전 번호를 비교하는 방법 (0) | 2023.01.21 |
[파이썬] NameError: global name 'xrange' is not defined (0) | 2023.01.20 |