json2jsonp的字符编码

时间:2015-11-21 16:37:26

标签: json character-encoding

我需要一些字符编码方面的帮助。 我想以jsonp:

的形式访问这个api
http://api.mymemory.translated.net/get?q=<some phrase>&langpair=de|en

这有效:

  

http://json2jsonp.com/?url=http://api.mymemory.translated.net/get?q=Hund%26langpair=de|en&callback=cbfunc

但这不是:

  

http://json2jsonp.com/?url=http://api.mymemory.translated.net/get?q=Lösung%26langpair=de|en&callback=cbfunc

L%C3%B6sungL%25C3%25B6sung也不起作用, 即使没有json2jsonp,它也能正常工作。

任何想法/替代品?

1 个答案:

答案 0 :(得分:0)

似乎JSON2JSONP不支持非ASCII字符。 http://json2jsonp.com/?url=http%3A%2F%2Fapi.mymemory.translated.net%2Fget%3Fq%3DL%25C3%25B6sung%26langpair%3Dde%257Cen&callback=cbfunc应返回正确的JSONP,但实际上会发生错误,因为JSON2JSONP使用GET /get?q=L\xc3\xb6sung&langpair=de|en HTTP/1.1而不是GET /get?q=L%C3%B6sung&langpair=de%7Cen HTTP/1.1发送无效的HTTP GET请求。

如果您可以使用XMLHttpRequest和JSON.parse,则不再需要JSONP。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200)  {
        cbfunc(JSON.parse(xhr.responseText));
    }
};
xhr.open("GET", "http://api.mymemory.translated.net/get?q=L%C3%B6sung&langpair=de%7Cen");
xhr.send();