如何从 javascript webapp 和后端 Apache Derby 保存和呈现表情符号

How to save and render emoji from a javascript webapp and backend Apache Derby

我在我的 http post 请求中提交表情符号(来自我的 Mac):

它在我的 derby 数据库中保存为: ðŸ〜€

它作为响应发回: ðŸ〜€

我有点困惑 1) 我的图像和字符输出是否相同,只是使用了不同的编码? 2) 我的 html 使用的是 utf-8 标签 - 那么我怎样才能让浏览器显示表情符号图像呢?

更多信息: 我写了一个 JUnit 测试如下:

System.out.println(Charset.defaultCharset()); <-- prints UTF-8
String str = "ðâ½ï¸";   
System.out.println("testConvertToUtf8:"+new String(str.getBytes(UTF_8))); <--- prints char. 
System.out.println("testConvertToUtf8:"+new String(str.getBytes(ISO_8859_1))); <-- displays emojis!!! 

当我使用 ISO_8859_1 对字符进行编码时,为什么会出现表情符号?我在 OS El Capitan 10.11.6 运行

请将您的数据库编码设置为utf8mb4

基本上,我的请求编码在读取 multipart/form-data 时被 Apache ServletFileUpload 从 utf-8 更改为 iso-8859-1。我将 fileItem.getString() 修改为 fileItem.getString(charset) 如下,这解决了我的问题:

    ServletFileUpload upload = new ServletFileUpload(factory);
    items = upload.parseRequest(httpServletRequestHelper);
}
for (FileItem item : items) {
    if (item.isFormField()) {
        String charset = item.getContentType() == null ? "UTF-8" : item.getContentType();
            this.setStringAttribute(item.getFieldName(), new String[] { **item.getString(charset)** }, parseHash);
        }
}