Pythonについて覺えたことや疑問に思ったこと、及び參考にしたリソースをメモして行く感じで。面倒なのでマーク附けは最小限に。
URIエンコードとデコードにはurllibモジュールのquote()とunquote()が使へる。
# -*- coding: utf-8; -*-
import urllib
print urllib.quote('いろはにほへと')
print urllib.quote(u'いろはにほへと'.encode('euc-jp'))
print urllib.quote(u'いろはにほへと'.encode('shift_jis'))
print urllib.quote(u'いろはにほへと'.encode('iso-2022-jp'))
print urllib.quote(u'いろはにほへと')
print urllib.unquote('%E3%81%84%E3%82%8D%E3%81%AF%E3%81%AB%E3%81%BB%E3%81%B8%E3%81%A8')
實行結果:
%E3%81%84%E3%82%8D%E3%81%AF%E3%81%AB%E3%81%BB%E3%81%B8%E3%81%A8 %A4%A4%A4%ED%A4%CF%A4%CB%A4%DB%A4%D8%A4%C8 %82%A2%82%EB%82%CD%82%C9%82%D9%82%D6%82%C6 %1B%24B%24%24%24m%24O%24K%24%5B%24X%24H%1B%28B %3044%308D%306F%306B%307B%3078%3068 いろはにほへと
クエリ文字列用のエンコード・デコードにはquote_plus()とunquote_plus()。空白が+に、+が空白になる。
# -*- coding: utf-8; -*-
import urllib
print urllib.quote_plus('Python URIエンコード')
print urllib.unquote_plus('Python+URI%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89')
實行結果:
Python+URI%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89 Python URIエンコード
クエリ文字列を作るならurlencode()といふのもある。
# -*- coding: utf-8; -*-
import urllib
urlprefix = 'http://www.google.co.jp/search?'
keyword = u'Python URIエンコード'
lang = 'ja'
encoding = 'utf-8'
query = [
('q', keyword.encode(encoding)),
('hl', lang),
('lr', 'lang_' + lang),
('ie', encoding),
('oe', encoding),
]
print urlprefix + urllib.urlencode(query)
實行結果:
http://www.google.co.jp/search?q=Python+URI%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8
辭書を引數にすることも出來る。ただしその場合要素(クエリ)の順番は保持されない。
# -*- coding: utf-8; -*-
import urllib
urlprefix = 'http://www.google.co.jp/search?'
keyword = u'Python URIエンコード'
lang = 'ja'
encoding = 'utf-8'
query = {
'q': keyword.encode(encoding),
'hl': lang,
'lr': 'lang_'+ lang,
'ie': encoding,
'oe': encoding,
}
print urlprefix + urllib.urlencode(query)
實行例:
http://www.google.co.jp/search?q=Python+URI%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89&ie=utf-8&oe=utf-8&lr=lang_ja&hl=ja
參考: