我们将用户选择的表情符号存储在 MySQL 的文本正文中。我们的列看起来像这样
`body` text CHARACTER SET utf8 COLLATE utf8_bin,
原始数据:<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D</div>
数据库中的数据:<div id='mobile-question-style' style="font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;">????????????</div>
但是如果从 Rest API 获取它,它看起来是正确的:"body":"<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">\uD83D\uDE1D\uD83D\uDE3E\uD83D\uDE3E\uD83D\uDE3A\uD83D\uDE3A\uD83D\uDE1D</div>",
现在,当我使用 Rest API 更新问题时,它会丢失编码并显示“????”
更新后来自端点的数据:"body":"<div id='mobile-question-style' style=\"font-family: 'Helvetica Neue',Helvetica,Arial; color:#333333;\">????????????</div>",
更新正文时有特殊的逻辑,所以有人知道这里发生了什么吗?
最佳答案
要将表情符号存储到 Mysql 数据库中,请将您要存储的字符串转换为编码的 Base 64 字符串。在您的应用程序端,您所要做的就是使用 Base 64 解码该字符串。
编码
byte[] data = editTextFieldWithEmojis.getText().toString().getBytes("UTF-8");
base64String = Base64.encodeToString(data, Base64.DEFAULT);
解码
byte[] data = Base64.decode(stringWithEmojis, Base64.DEFAULT);
newStringWithEmojis = new String(data, "UTF-8");
关于java - 在 MySQL 中存储 Android 表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684739/