App Engine打破编码

时间:2015-01-18 21:58:49

标签: json google-app-engine objectify

当我在本地部署后端并调用apimethod(通过url或explorer)时,我会在JSON中收到响应:

"pronunciations": [  {   
    "type": "ahd-legacy",   
    "pronunciation": "(rēˈstrə)"  
} ]

然而,第二个我将它部署到app引擎并调用此方法(将对象存储在objectify中),然后以该对象格式将其发送回来我将其作为JSON接收:

"pronunciations": [  {
    "type": "ahd-legacy",
    "pronunciation": "(r����str��)"
} ]

我也尝试将字符串存储为utf-8字节(该对象自动转换为base64,然后仍然转换为上面的字符串)

我应该专门标记一些内容以便正确存储吗?

2 个答案:

答案 0 :(得分:1)

我弄清楚它是什么。从本地运行并且在部署时不起作用的原因是因为当我调用从端点接收某些内容时,它会自动使用ASCII服务器的编码。如果你希望这个工作,你需要像这样提出你的要求:

URL url = new URL(uri);
String response = new BufferedReader(
    new InputStreamReader(url.openStream(), "UTF-8")).readLine();

JSONParser jsonParser = new JSONParser();
return jsonParser.parse(response);

答案 1 :(得分:0)

这可能不是存储问题,但更有可能是您从网络接收/发送数据并对其进行编码/解码时的编码问题。

GAE生产服务器上的JVM设置为使用US-ASCII作为默认编码。在您的本地计算机上,它可能设置为UTF-8。

无论何时在String和字节数组之间进行转换,都应该始终显式使用UTF-8。