如何在 Java 中替换/删除 UTF-8 字符串中的 4(+) 字节字符?

2024-04-16

由于 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(使用前将#替换为@)

如何在 Java 中替换/删除 UTF-8 字符串中的 4(+) 字节字符? 的相关文章

随机推荐