8

このエラーは、mysql列が値を受け入れないことを意味しますが、値がJava UTF-8でエンコードされた文字列に収まり、mysql列がutf8_general_ciであるため、これは奇妙です。また、これらを除いて、これまでのところすべてのutf8文字は適切に機能しています。

ユースケースは次のとおりです。ツイートをインポートしています。問題のツイートは次のとおりです。https ://twitter.com/bakervin/status/210054214951518212-2つの「奇妙な」文字(およびそれらの間の2つの奇妙な空白)を見ることができます。問題は、これをどのように処理するかです。

  • これらの文字をトリミングします(どのように-それらはどれですか、Java UTF-8はMySQLのものとどのように異なりますか)
  • 列がこの値を受け入れることができるようにします(どのように-utf8_general_ciよりもutf-yがありますか)
4

1 に答える 1

13

これらはUnicode サロゲート文字のようです。これらは実際の文字ではなく、MySQL がサポートしていないように見えるため、トリミングしても安全です。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
    char ch = text.charAt(i);
    if (!Character.isHighSurrogate(ch) && !Character.isLowSurrogate(ch)) {
        sb.append(ch);
    }
}
return sb.toString();
于 2012-06-16T05:59:54.790 に答える