java - 我如何将 UTF8mb4 转换为 UTF-8?

标签 java docx4j utf8mb4

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

错误 pool-3-thread-20 org.hibernate.util.JDBCExceptionReporter - 字符串值不正确:'\xEF\xBF\xBD???...' 第 1 行的“u_content”列

我没有将我们的 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();
}

关于java - 我如何将 UTF8mb4 转换为 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28488939/

相关文章:

java - 怀疑hibernate JPA中的多对多关系

java - Parse.com 数据未保存到不同的表/对象

java - 一些 URL 模式丢失了 css

java - 在 Docx4J 中创建 .docx 文件的新部分

java - 如何使用 Java 编辑 docx

java - Docx4j 在书签上设置值

mysql - 如何一次性修改mariadb图表集?

java - Android Volley 忽略参数无法连接

Mysql2::Error 无法初始化字符集utf8mb4 (路径:/usr/share/mysql/charsets/)

mysql - phpmyadmin 服务器变量和 session 值