Hatena::Grouppython

HM python

Pythonについて覺えたことや疑問に思ったこと、及び參考にしたリソースをメモして行く感じで。面倒なのでマーク附けは最小限に。

 | 

2006-06-09

PythonでURIエンコードするには

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

參考:

 | 
MORIYAMA Hiroshi <hiroshi@kvd.biglobe.ne.jp>