1

docx4j を使用して .docx ファイルを html に変換し、そのデータを MySQL データベースに保存しています。残念ながら、問題が発生しました。utf8mb4 でエンコードされた文字を含むドキュメントを変換し、そのデータを MySQL サーバーに送信しようとすると、utf8mb4 文字を解析する方法がわからないという一般的な JDBC 例外が発生します。

ERROR pool-3-thread-20 org.hibernate.util.JDBCExceptionReporter - 行 1 の列「u_content」の「\xEF\xBF\xBD???...」の文字列値が正しくありません

MySQL サーバーを 5.5 に移行する「許可」がないため、その修正は公開されていません。

Java では、どうにかして utf-8mb4 を utf-8 に戻し、すべての utf-8mb4 文字を � または何かに変換することはできますか?

4

1 に答える 1

4

最初に不適切な文字を削除してから、コンテンツをデータベースに永続化する必要があります。これはあなたを助けるでしょう:

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();
}
于 2015-09-29T21:02:30.647 に答える