过滤3个字节以上的utf-8字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤3个字节以上的utf-8字符相关的知识,希望对你有一定的参考价值。

/**
     * 过滤掉超过3个字节的UTF8字符
     * @param text
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String filterOffUtf8Mb4(String text) throws UnsupportedEncodingException {
        byte[] bytes = text.getBytes("utf-8");
        ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
        int i = 0;
        while (i < bytes.length) {
            short b = bytes[i];
            if (b > 0) {
                buffer.put(bytes[i++]);
                continue;
            }

            b += 256; // 去掉符号位

            if (((b >> 5) ^ 0x6) == 0) {
                buffer.put(bytes, i, 2);
                i += 2;
            } else if (((b >> 4) ^ 0xE) == 0) {
                buffer.put(bytes, i, 3);
                i += 3;
            } else if (((b >> 3) ^ 0x1E) == 0) {
                i += 4;
            } else if (((b >> 2) ^ 0x3E) == 0) {
                i += 5;
            } else if (((b >> 1) ^ 0x7E) == 0) {
                i += 6;
            } else {
                buffer.put(bytes[i++]);
            }
        }
        buffer.flip();
        return new String(buffer.array(), "utf-8");
    }

 

以上是关于过滤3个字节以上的utf-8字符的主要内容,如果未能解决你的问题,请参考以下文章

3.9

Java如何检测替换4个字节的utf-8编码(此范围编码包含emoji)

关于“为何Unicode中文字符占取2个字节,而 UTF-8却占3个字节”的网络解释修正

UTF-8 中的所有汉字字符都是 3 个字节长吗?

MySQL中varchar与char区别

一个汉字占用2个字节,用UTF-8编码方式存储10个汉字,请问一共占用多少个字节