EntryNavi : « QMLのレイアウトでパーツを重ねた時のメモ | メイン | Chromebookが来た! »

CategoryNavi : メイン -> コンピューター -> 開発 -> Qt

QML(Qt)でQt.openUrlExternallyとXmlListModelを使うときの謎

だれか解決方法を教えてください。
以下の2つにURLを与えた時の動作がよくわかりません。
勝手にURLエンコードをしているようなのですがなんなのだろう・・・。

・Qt.openUrlExternally
・XmlListModel.source


といっても分かりにくいので具体例

Qt.openUrlExternallyの場合

指定したアドレス : https://relog.xii.jp/?param=a%3Db
ブラウザに渡るアドレス : https://relog.xii.jp/?param=a%253Db

なにか、増えてます。
なんと「%」がURLエンコードされて「%25」になってしまっているのです。
ちなみに「%3D」=「=」です。

じゃあと、下のようにすると

指定したアドレス : https://relog.xii.jp/?param=a=b
ブラウザに渡るアドレス : https://relog.xii.jp/?param=a=b

意味不明です。


ある意味ここからが本題です。
Twitterクライアントを作ってみていたのでOAuthでサインした情報をURLに含めないといけません。
で、シグネチャには記号が含まれるのです。
取得したデータを解析して表示するのはXmlListModelを使用するととっても便利なので使いたいです。
なのに、こんな事が起こります。

XmlListModel.sourceの場合

指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6%2F0HsRadQrtepWXk%3D

実際に解釈されていると思われるアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6%252F0HsRadQrtepWXk%253D

実際にこれだとデータは取得できませんでした。
なので、こんな風にデコードした状態にすると取得できました。

指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk=

これで事が済んでいればOKだったのですが、下の場合はNGでした。

指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrt+epWXk=

もー、意味不明です。
どうやら、「+」だけはエンコードしてくれないようです。


回避策としてとりあえず考えたのは
「XmlListModel.xml」というパラメータがあってXMLを直接していして表示させる機能があります。
なので、予め「XMLHttpRequest」を使用してXMLを取得して与えます。
これなら一応やりたいことはできるのですがなんとなく釈然としません。

こんな時はどうするべきなんでしょうか?

追記
調べてみるから再現するサンプルを~とご依頼を受けたので作ってみてわかったこと。
どうやら、何でもかんでもURLエンコードしているわけではなく、少なくとも「=」「+」「%」「/」の4文字の中では「%」のみがエンコードされるようです。
その他はそのままサーバーへ投げられてました。
以下のような感じになります。
指定したアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk%3D

実際に解釈されていると思われるアドレス :
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_signature_method=HMAC-SHA1
&oauth_consumer_key=hogehoge
&oauth_token=hogehoge
&oauth_timestamp=1311414136
&oauth_nonce=JObovQ
&oauth_signature=95qFNzWfhe6/0HsRadQrtepWXk%253D


@task_jpさんが調べてくれたのですが、バグレポートでも話題になっているようです。
-> Issue with QUrl percent encoding in TolerantMode
僕も1票いれてきましたw

<Category : Qt>

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34