Java 如何将UTF-8mb4转换为UTF-8?

Java 如何将UTF-8mb4转换为UTF-8?,java,docx4j,utf8mb4,Java,Docx4j,Utf8mb4,我使用docx4j将.docx文件转换为html,然后将数据保存到MySQL数据库中。不幸的是,我们遇到了一个障碍。当我们转换一个包含utf8mb4编码字符的文档,然后尝试将该数据提交到MySQL服务器时,我们会遇到一个通用JDBC异常,该异常表示它不知道如何解析utf8mb4字符 错误pool-3-thread-20 org.hibernate.util.jdbceptionReporter-第1行“u_内容”列的字符串值“\xEF\xBF\xBD???…”不正确 我没有“许可”将MySQL服

我使用docx4j将.docx文件转换为html,然后将数据保存到MySQL数据库中。不幸的是,我们遇到了一个障碍。当我们转换一个包含utf8mb4编码字符的文档,然后尝试将该数据提交到MySQL服务器时,我们会遇到一个通用JDBC异常,该异常表示它不知道如何解析utf8mb4字符

错误pool-3-thread-20 org.hibernate.util.jdbceptionReporter-第1行“u_内容”列的字符串值“\xEF\xBF\xBD???…”不正确

我没有“许可”将MySQL服务器升级到5.5,所以该修复程序已经过时


在Java中,我是否可以将utf-8mb4转换回utf-8,并将所有utf-8mb4字符转换成� 还是什么?

您应该先删除不正确的字符,然后将内容保存到数据库中。 这将帮助您:

public static String removeBadChars(String s) {
  if (s == null) return null;
  StringBuilder sb = new StringBuilder();
  for(int i = 0 ; i < s.length() ; i++){ 
    if (Character.isHighSurrogate(s.charAt(i))) continue;
    sb.append(s.charAt(i));
  }
  return sb.toString();
}

您应该先删除不正确的字符,然后将内容持久保存到数据库中。 这将帮助您:

public static String removeBadChars(String s) {
  if (s == null) return null;
  StringBuilder sb = new StringBuilder();
  for(int i = 0 ; i < s.length() ; i++){ 
    if (Character.isHighSurrogate(s.charAt(i))) continue;
    sb.append(s.charAt(i));
  }
  return sb.toString();
}

utf-8mb4只是MySQL对utf-8的名称。告诉Java它是utf-8,您就完成了;然后,您将如何处理相关的输出流?您正在运行哪个版本的MySQL?我发现这篇文章真的很有帮助:markspace,我希望它能这么简单。对导出的HTML字符串数据进行编码并将其编码为UTF8并不能解决此问题。仍然需要MySQL数据库中的UTF8mb4支持。//JasonPlutext,我们正在将HTML数据作为BLOB变量填充到MySQL数据库中克里斯洛特,谢谢你的来信。我要仔细研究一下,看看能不能找到答案-您可以尝试使用3.3开发版本,看看是否效果更好;它包含改进的星体字符处理:-utf-8mb4只是MySQL对utf-8的名称。告诉Java它是utf-8,您就完成了;然后,您将如何处理相关的输出流?您正在运行哪个版本的MySQL?我发现这篇文章真的很有帮助:markspace,我希望它能这么简单。对导出的HTML字符串数据进行编码并将其编码为UTF8并不能解决此问题。仍然需要MySQL数据库中的UTF8mb4支持。//JasonPlutext,我们正在将HTML数据作为BLOB变量填充到MySQL数据库中克里斯洛特,谢谢你的来信。我要仔细研究一下,看看能不能找到答案-您可以尝试使用3.3开发版本,看看是否效果更好;它包含改进的星体角色处理:-