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

  • 質問

  • お世話になります。

    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 質問の修正
    2013年10月18日 23:57

回答

  • 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
    2013年10月19日 1:24

すべての返信

  • 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
    2013年10月19日 1:24
  • アドバイスありがとうございます。

    JavaScriptのencodeURIを使ってUTF-8でエンコードしたらすんなり動きました。

    2013年10月19日 1:55