【发布时间】:2016-03-13 16:07:29
【问题描述】:
每当用户输入 ???? 等移动表情符号时,在我的网站上进入输入字段,它将被保存为??在我的数据库中。
那些表情符号是用 utf8mb4 编码的,所以我已经将我的数据库排序规则更新为 utf8mb4_general_ci。
虽然现在可以在将包含表情符号的消息从客户端传输到我的服务器时成功保存表情符号,但它仍然会在某个地方更改为 ??我现在正试图弄清楚在哪里以及如何解决它。
在这个 ajax 调用中将消息发送到我的服务器:
function updateStatus() {
var status = $("#status").val();
jsRoutes.controllers.Userdata.updateStatus( status ).ajax({
success : function(data) {
$("#profil").cftoaster({content: data});
},
error : function(err) {
$("#profil").cftoaster({content: err.responseText});
}
});
}
在服务器端,我使用基于 java 的 Play Framework 2.4.4。 这是在 ajax 调用中调用的方法的开头:
public static Result updateStatus(String status) {
String receivedName = Application.getSessionUser();
Logger.debug("RecvStatus: " + status);
...
}
对于表情符号,Logger 输出已经是 ??。
路线如下:
PUT /status/ controllers.Userdata.updateStatus(status: String)
编辑:
为了确保从客户端到服务器的传输正常,我现在正在传输实际的 unicode 值,我像这样更改我的服务器功能
Logger.debug("RecvStatus: " + status);
status = status.replace("\\","");
String[] arr = status.split("u");
status = "";
for(int i = 1; i < arr.length; i++){
int hexVal = Integer.parseInt(arr[i], 16);
status += (char)hexVal;
}
Logger.debug("RecvStatus: " + status);
并得到以下输出:
[debug] application - RecvStatus: \ud83d\ude01
[debug] application - RecvStatus: ?
这意味着问题可能与java有关
【问题讨论】:
标签: javascript java ajax playframework