トップ回答者
RESTサービスを使ってリストアイテムを取得する際、日本語の文字列でfilterしようとするとうまくいかない

質問
-
お世話になります。
SharePoint Online (2013バージョンアップ済み)で、件名の状況に遭遇しています。
https://(サイトコレクションパス)/_api/web/lists/getbytitle('リスト名(日本語)')/items?$filter=Title eq 'アルファベット(例:sales)'
というリクエストURIだとリストのアイテムが想定通り取得できるのですが、
https://(サイトコレクションパス)/_api/web/lists/getbytitle('リスト名(日本語)')/items?$filter=Title eq '日本語(例:営業)'
というURIだとリスト上に該当するアイテムがあっても結果が0件となってしまいます。
日本語を使う場合には何かしらエンコード等しなければいけないのかもしれませんが、
情報が見つけられずにいます。
どなたかご存知であればアドバイスいただけないでしょうか。
よろしくお願いします。
- 編集済み Hiroshi.Y 2013年10月18日 23:59 質問の修正
回答
-
Sharepoint は分かりませんのでハズレかもしれませんが・・・
IE と ASP.NET のクエリ文字列の問題ではないかと思われます。
例えば、IE から以下のような URL を要求した場合、
http://www.abc.com/日本語.aspx?data=日本語
? の前の "日本語" は URL エンコードしてから送信しますが、クエリ文字列の "日本語" は文字コードのバイト列を生のまま送ります。
それゆえ、サーバー側で Request.QueryString["data"] では "日本語" は正しく取得できません。
詳しくは以下のページを見てください。
ブラウザによる URL のエンコーディング
http://surferonwww.info/BlogEngine/post/2011/11/07/Encoding-of-URL-directly-written-in-address-bar-of-browser.aspx
> 日本語を使う場合には何かしらエンコード等しなければいけないのかもしれませんが、上記の問題であれば、解決策はクエリ文字列の日本語(実際は、日本語に限らず ASCII 文字以外全て)を「URL エンコードする」ということになります。
URL エンコードが何か不明であればググって調べてください。
- 回答としてマーク Hiroshi.Y 2013年10月19日 1:55
すべての返信
-
Sharepoint は分かりませんのでハズレかもしれませんが・・・
IE と ASP.NET のクエリ文字列の問題ではないかと思われます。
例えば、IE から以下のような URL を要求した場合、
http://www.abc.com/日本語.aspx?data=日本語
? の前の "日本語" は URL エンコードしてから送信しますが、クエリ文字列の "日本語" は文字コードのバイト列を生のまま送ります。
それゆえ、サーバー側で Request.QueryString["data"] では "日本語" は正しく取得できません。
詳しくは以下のページを見てください。
ブラウザによる URL のエンコーディング
http://surferonwww.info/BlogEngine/post/2011/11/07/Encoding-of-URL-directly-written-in-address-bar-of-browser.aspx
> 日本語を使う場合には何かしらエンコード等しなければいけないのかもしれませんが、上記の問題であれば、解決策はクエリ文字列の日本語(実際は、日本語に限らず ASCII 文字以外全て)を「URL エンコードする」ということになります。
URL エンコードが何か不明であればググって調べてください。
- 回答としてマーク Hiroshi.Y 2013年10月19日 1:55