1. ホーム
  2. スクリプト・コラム
  3. パール

python urllibでのエンコード処理例

2022-01-03 02:35:56

コピーコード コードは以下の通りです。

>>> import urllib
>>> data = 'Lijiang'
>>> print data
Lijiang
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>> urllib.quote(data)
'%E4%B8%BD%E6%B1%9F'

引き返したいときは?
コピーコード コードは以下の通りです。

>>> urllib.unquote('%E4%B8%BD%E6%B1%9F')
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>> print urllib.unquote('%E4%B8%BD%E6%B1%9F')
Lijiang

エンコード形式の違いは、urllibの結果ページに影響を及ぼします。Baiduはgbk、googleなどの一般的なサイトはutf8です。そこで、以下のような記述で実現することができます。
コピーコード コードは以下の通りです。

>>> import sys,urllib
>>> s = 'lijiang'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
'%C0%F6%BD%AD'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
'%E4%B8%BD%E6%B1%9F'
>>>

ここでのsys.stdin.encodingは、現在の環境のエンコーディングを読み取るもので、移植性が高く、wintでもxunixでも使用することができます。もちろん、これが嫌ならutf8などの独自の環境エンコーディングに置き換えることができます。