窗口存储应用程序中的GET/POST请求参数编码问题



我正在编写一个Windows商店应用程序,在我的DAL中,我从web服务获取XML数据。我使用的是网站API公开的HTTP GET请求和响应。

我能够成功地从各种不需要参数的方法中获得数据,或获取整数参数。。

当我不得不使用字符串参数时,问题就开始了,英语字符串成功地通过了,但希伯来语中的字符串没有。

当我使用该网站的API开发的测试表单,在textBox中输入say"Şרית",它返回一个XML罚款,通过嗅探器,我看到字符串被编码为%E3%E9%F7%F1%E9

当我自己用相同名称的代码构建URI时,我只得到XML的架构,并且我看到字符串被编码为%D7%93%D7%99%D7%A7%D7%A1%D7%99,意思是用UTF-8编码的URL

我试着编码到希伯来语,解码回utf-8,得到了这个字符串:当我把它放在这样的工具中时:http://coderstoolbox.net/string/我看到,如果我对该字符串进行URL编码(?),我将获得所需的%F0%E0%F4%E9%F1。

所以我把那个字符串发送到api,但它显示为%C3%B0%C3%A0%C3%B4%C3%A9%C3%B1ang再次只返回XML的模式,而没有实际数据。。

我尝试过的另一种方法是对希伯来语单词进行不同的编码。由于WinRT不支持"httputility",我不得不用反射器将其导入回来。。必须告诉你,这并不好玩。。

我最终得到了编码为%u05e0%u05d0%u05e4%u05d9%u05e1当我从这样的浏览器使用它时:

http://new.rest.co.il/WebService/RestWS.asmx/SearchRestsByName?Keyword=%u05e0%u05d0%u05e4%u05d9%u05e1

它工作得很好,获取实际的XML数据,在嗅探器中,参数保持不变(%u05e0%u05d0%u05e4%u05d9%u05e1)。

但当我从代码中使用它时,我再次只得到模式,在嗅探器中,我看到字符串被编码为:%25u05e0%25u05d0%25u5e4%25u05d9%25u05e1这意味着它再次被URL编码!

我对此感到非常绝望。。我试过了所有的组合。。

有人知道这件事吗?谢谢

在发送到fb之前,您应该先进行json_encode,然后进行json_edecode,这就完成了任务。下面是一个PHP示例:

$album_details = array(
'message'=> 'Live photos from our app',                      
'name'=> $title, // This can be any non-english characters that can be in unicode
'access_token'=>$pageAccessToken
);
$jsonStr = json_encode($album_details); // THIS IS KEY IN WHATEVER PLATFORM
$decoded_album_settings = json_decode($jsonStr, true); // THIS IS KEY IN WHATEVER PLATFORM
$create_album = $this->facebook->api('/'.$this->facebookPageId.'/albums', 'post', $decoded_album_settings);

这个想法来自这里:https://stackoverflow.com/a/3806967/1200166

最新更新