Windows应用商店应用程序中的GET / POST请求参数编码问题

时间:2012-11-26 14:13:16

标签: encoding windows-runtime http-get url-encoding

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

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

问题在我必须使用字符串参数时启动,英语字符串成功传递但希伯来语中的字符串没有。

当我使用网站API开发的测试表格时,输入说“נאפיס”到textBox,它会返回一个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%B1 再次只返回没有实际数据的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%25u05e4%25u05d9%25u05e1 意思是它再次被URL编码!

我非常绝望......我尝试了所有组合......

有人对此有所了解吗?感谢。

1 个答案:

答案 0 :(得分:0)

在发送到fb之前你应该json_encode然后json_decode,它就可以了。 这是一个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