Amazon

ラベル encodeURI の投稿を表示しています。 すべての投稿を表示
ラベル encodeURI の投稿を表示しています。 すべての投稿を表示

2011年11月26日土曜日

PythonでJavaScriptのencodeURIと同じことをやるには?

JavaScriptで言うところのencodeURIと同じことをPythonでやるにはurllib.quote()メソッドを使う。

第一引数に変換したい文字列を、第二引数に変換したい文字コードを設定すること。
# -*- 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')


但し上記の方法だと、GETリクエストのURIは作りにくいので、urllib.urlencode()というメソッドがある。これはクエリにしたいものをリスト形式で記述して、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)
 
 
参考元はこちら 
 

2011年6月16日木曜日

IEでmixiのsimplepostを使って日記を投稿するとエラー


mixiアプリ作っているときに
simplepostで日記にデータをポストする際、
ブラウザがIE7, 8の場合"Internet Explorer ではこのページは表示できません"というエラーが出てしまうことがある。(いつもではない)

そこでJavaScriptのencodeURIを疑ってみるも、encodeURIComponentを使っても特定の語をエンコードするかしないかの違いでしかないので原因というわけではなさそうだ。

これ関連で調べてたらGETで投げられるURLの長さに制限があることが判明。
しかもブラウザごとに違うというからIEだけで問題が生じるのも納得。

[IE] URL に使用可能な文字数は最大 2,083 文字

しかも漢字1文字は3byte, encodeURIでエンコードするとさらに3倍の9byte
GETで投げられる日本語は250文字前後ということでしょうか。。。


Amazon3