App Engine 中断编码

App Engine Breaks Encoding

当我在本地部署后端并调用 apimethod(通过 url 或资源管理器)时,我在 JSON:

中收到了响应
"pronunciations": [  {   
    "type": "ahd-legacy",   
    "pronunciation": "(rēˈstrə)"  
} ]

但是,第二次我将它部署到应用引擎并调用此方法(将对象存储在 objectify 中),然后以该对象格式将其发回我收到的 JSON:

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

我也试过将字符串存储为 utf-8 字节(objectify 会自动转换为 base64,然后仍会转换为上述格式)

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

这可能不是存储问题,而更可能是您 receive/send 数据 from/to 网络和 encode/decode 网络的编码问题。

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

无论何时在字符串和字节数组之间进行转换,都应始终明确使用 UTF-8。

我明白这是什么了。当 运行 从本地时它工作正常而在部署时不起作用的原因是因为当我调用从端点接收某些东西时,它会自动使用服务器的编码,即 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);