Play 框架中的 Json 响应字符编码
Posted
技术标签:
【中文标题】Play 框架中的 Json 响应字符编码【英文标题】:Json response character encoding in Play Framework 【发布时间】:2013-01-14 10:44:13 【问题描述】:我遇到了问题,需要您的帮助。
我正在使用 Java 中的 Play Framework v1.2.4 用于我的移动应用程序的服务器中工作,但 Json 响应存在问题。
我一直使用视图来编码我的 Json 响应,但我意识到当我使用特殊字符(如 ñ、\n、á、é 等)时会出现问题,并且我的移动应用程序有错误运行。
代码如下:
"id":$data[0],
"messages":
[
#list items:data[1], as:'message'
"text":"$message.text"
$message_isLast ? '' : ','
#/list
]
我尝试使用 java 方法而不是在 .json 视图中正确解析响应,这没关系。那是代码:
JsonObject jsonOut = new JsonObject();
jsonOut.addProperty("id",conversation.id);
JsonArray jsonArray = new JsonArray();
for(int i = 0; i < conversation.messages.size; i++)
Message message = conversation.messages.get(i);
JsonObject jsonMessage = new JsonObject();
jsonMessage.addProperty("text", message.text);
jsonArray.add(jsonMessage);
jsonOut.add("messages", jsonArray);
renderText(jsonOut);
我的问题是我是否可以在视图中做一些事情来将变量正确解析为 json 格式而无需手动操作,因为我有很多必须更改的响应。
【问题讨论】:
【参考方案1】:使用模板来呈现 JSON 字符串是……不好(无论如何,我应该在这里完成我的答案……)。
JSON 序列化程序通常会处理正确的引号、转义特殊字符、尊重类型、编码字符(如果需要)等...我可以看到您的模板不这样做。
使用模板,您需要自己做所有事情,如果您不完全了解 JSON 规范,您将被判失败。这不仅仅是将$message.text
粘贴到适当的位置......
换句话说:你的第二种方法总是比第一种更好。
【讨论】:
感谢您的回答。我必须重做我的所有申请,但最好知道正确的做法。【参考方案2】:JSON 的默认编码是 UTF-8。 Java 的默认编码取决于区域设置。
您需要确保运行 Play 的 JVM 也以 Charset.defaultCharset() 的形式运行 UTF-8。
【讨论】:
但是我的服务器已经上传到 Heroku Server。我可以在那里将默认编码设为 UTF-8 吗?怎么样?【参考方案3】:编译器和编辑器都应将其编码设置为“UTF-8”。 Play 框架和 JSON 已经使用 UTF-8。属性文件应该是\u....
编码的。错误可能出在非 Java 文件中。
【讨论】:
以上是关于Play 框架中的 Json 响应字符编码的主要内容,如果未能解决你的问题,请参考以下文章
仅在内容类型 === JSON 时更改 Java 过滤器中的内容类型或字符编码