8

我知道这个错误意味着 mysql 列不接受该值,但这很奇怪,因为该值适合 Java UTF-8 编码字符串,而 mysql 列是 utf8_general_ci。此外,到目前为止,所有 utf8 字符都可以正常工作,除了这些。

用例是:我正在导入推文。有问题的推文是:https ://twitter.com/bakervin/status/210054214951518212 - 你可以看到两个“奇怪”的字符(以及它们之间的两个奇怪的空格)。问题是 - 如何处理:

  • 修剪这些字符(如何 - 它们是什么,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 回答