有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript将包含情感的字符串传输到服务器

在我的网站上,每当用户输入移动表情符号时😀 在输入字段中,它将另存为??在我的数据库里

这些表情是用utf8mb4编码的,所以我已经将我的数据库排序规则更新为utf8mb4\u general\u 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);
        ...

}

记录器输出已经是表情符号的??

路线如下所示:

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上


共 (1) 个答案

  1. # 1 楼答案

    因此,对于任何有类似问题的人,我的解决方法

    首先,我尝试将java中的字符串转换为base64并以这种方式存储。不幸的是,在解码base64之后,unicode信息仍然丢失,并且??显示的是表情符号,而不是表情符号

    我所做的是将收到的字符串转换为unicode和base64,当我从数据库加载字符串时,我首先对base64进行解码,然后将unicode信息转换为实际字符串。这样可以存储表情符号,然后正确显示