簡體   English   中英

如何在Python中將UTF-8字符串轉換為URL兼容字符串?

[英]How to convert a UTF-8 string to URL compliant string in Python?

我確定我不是第一個遇到此問題的人。 但是經過數小時的調試,谷歌搜索和StackOverflow-ing卻找不到答案之后,我決定發布此問題。 如果您錯過了任何事情,請提前抱歉,但是到現在為止,我還是很困惑。

我正在使用BeautifulSoup解析UTF-8網站。 我正在使用網站上的文字來構建URL,以便進一步抓取。 我在使用非英文字符時遇到了一些問題。

例如:該站點包含字符串Originální formule而我想用它來構建URL: http://blahblah.com/Originální-formule : Originální formulehttp://blahblah.com/origin%C3%A1ln%C3%AD-formule 問題是,我正在獲取http://blahblah.com/Origin\\xe1ln\\xed-formule ,這會產生錯誤。 我嘗試進行編碼,解碼和其他操作,但是仍然無法獲得正確的URL。

順便說一句,當我print u'Origin\\xe1ln\\xed-formule' ,字符串可以正常打印。 只是編碼不會成功。

我究竟做錯了什么?

為了實現您的期望,您必須執行以下操作:

  1. 分解網址
  2. 獲取路徑部分並將其編碼為utf-8
  3. 引用路徑
  4. 加入每個部分以獲取引用的URL

您可以結合使用以下功能來執行這些操作:

  • urlparse.urlparsedocs
  • urllib.quotedocs
  • urlparse.unparsedocs

該代碼將最終如下所示:

from urlparse import urlparse, urlunparse
from urllib import quote
x = u'http://blahblah.com/Originální-formule'
parsed_url = list(urlparse(x.encode('utf-8')))
parsed_url[2] = quote(parsed_url[2])
urlunparse(parsed_url)

結果: http://blahblah.com/Origin%C3%A1ln%C3%AD-formule : http://blahblah.com/Origin%C3%A1ln%C3%AD-formule

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM