由于 MySQL 5.1 不支持 4 字节 UTF-8 序列,因此我需要替换/删除这些字符串中的 4 字节序列。
我正在寻找一种干净的方法来替换这些字符。
Apache 库用问号替换字符对于这种情况来说是可以的,当然,尽管 ASCII 等效的字符会更好。
注意:输入来自外部来源(电子邮件名称),升级数据库目前不是解决方案。
我们最终用 Java 实现了以下方法来解决这个问题。
基本上用比最后 3 字节 UTF-8 字符更高的代码点替换字符。
偏移量计算是为了确保我们停留在 unicode 代码点上。
public static final String LAST_3_BYTE_UTF_CHAR = "\uFFFF";
public static final String REPLACEMENT_CHAR = "\uFFFD";
public static String toValid3ByteUTF8String(String s) {
final int length = s.length();
StringBuilder b = new StringBuilder(length);
for (int offset = 0; offset < length; ) {
final int codepoint = s.codePointAt(offset);
// do something with the codepoint
if (codepoint > CharUtils.LAST_3_BYTE_UTF_CHAR.codePointAt(0)) {
b.append(CharUtils.REPLACEMENT_CHAR);
} else {
if (Character.isValidCodePoint(codepoint)) {
b.appendCodePoint(codepoint);
} else {
b.append(CharUtils.REPLACEMENT_CHAR);
}
}
offset += Character.charCount(codepoint);
}
return b.toString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)