【发布时间】:2016-01-05 16:11:55
【问题描述】:
我有一个我无法解决的问题,它与编码变音符号有关(例如:ă Ă â Â î Î ş Ş ţ Ţ)。问题似乎出在客户端和服务器之间,但我不明白如何,因为我正确设置了字符集。
这是代码:
AngularJS 方面
$http({
method: 'POST',
url: serverUrl + 'wr/users/update',
data: JSON.stringify(content),
headers: { 'Content-Type': 'application/json; charset=utf-8'
}});
服务器 - Java Glassfish 4.1 Rest API
@Path("/update")
@POST
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String update(String data) {
JSONObject result = new JSONObject();
try {
JSONObject dataJson = new JSONObject(data);
System.out.println("[dataJson] " + dataJson.toString());
if (!dataJson.has("sessionId") ||
!dataJson.has("user")) {
result.put("success", "false");
result.put("errorMessage", "Fields missing.");
} else {
int userId = (int) em.createNamedQuery("Session.findAuthorBySession")
.setParameter("session", dataJson.getString("sessionId"))
.getSingleResult();
Users user = this.find(userId);
JSONObject new_user = dataJson.getJSONObject("user");
user.setBio(new_user.getString("bio"));
super.edit(user);
result.put("success", "true");
}
} catch (Exception e) { e.printStackTrace(); }
return result.toString();
}
如果我在 http post 调用之前打印内容,它看起来没问题 ('ă Ă â Â î Î ş Ş ţ Ţ'),当它到达 Rest API 时,它看起来如下:'? ? Î Î ? ? ? ?'。
也许是我错过了什么,但我不知道我做错了什么。
为什么会这样?
谢谢。
编辑 1
正如@JoseM 建议的那样,我查看了发送到服务器的请求,一切看起来都不错。如果不知何故我遗漏了什么,这就是请求:
请求标头
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,ro;q=0.6,en-GB;q=0.4
Connection:keep-alive
Content-Length:95
Content-Type:application/json; charset=UTF-8
Cookie:lastMessageSeen=151; hideBanner=true; session=7d7f5c64faf243cfbb469641d4a8c9a2
Host:app.meritwork.com
Origin:http://app.meritwork.com
Referer:http://app.meritwork.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
请求负载
{sessionId: "7d7f5c64faf243cfbb469641d4a8c9a2", user: {bio: "ă Ă â Â î Î ş Ş ţ Ţ"}}
编辑 2
关于json java解码器库,我在构造json对象之前打印了字符串,都是一样的; json 库不是问题。
【问题讨论】:
-
查看您的网络请求选项卡,检查发出的请求是否真的正确发出。如果确实如此,那么可能是介于两者之间的其他东西,甚至可能是库代码(有关另一个库 github.com/mulesoft/apikit/issues/46 的类似问题,请参阅此错误报告)
标签: java angularjs api rest diacritics