过滤非汉字的utf8的字符

原文:http://www.oschina.net/code/snippet_564772_13507

utf8是变长字符集,单个字符占用1~4个字节。mysql在选择utf8字符集时,最多只能存储3个字节的utf8字符,如果想要保存任意的utf8字符,数据必须用utf8mb4字符集,有些情况下,不能变更已选定的字符集,只好不得以而为之,把输入中的4个字节的utf8字符全部过滤掉,好在,utf8字符集中,汉字是3个字节的。

标签: <无>

代码片段(1)[全屏查看所有代码]

1. [代码][Java]代码     跳至 [1] [全屏预览]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

static public 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 ^ 0xC0) >> 4 == 0) {

                buffer.put(bytes, i, 2);

                i += 2;

            }

            else if ((b ^ 0xE0) >> 4 == 0) {

                buffer.put(bytes, i, 3);

                i += 3;

            }

            else if ((b ^ 0xF0) >> 4 == 0) {

                i += 4;

            }

        }

        buffer.flip();

        return new String(buffer.array(), "utf-8");

    }

举报

时间: 2024-10-14 00:35:41

过滤非汉字的utf8的字符的相关文章

iOS开发时间戳与时间NSDate,时区的转换,汉字与UTF8,16进制的转换

http://blog.sina.com.cn/s/blog_68661bd80101njdo.html 标签: ios时间戳 ios开发时间戳 ios16进制转中文 ios开发utf8转中文 ios汉字转utf8和16进   //获取当前系统的时间戳+(long)getTimeSp{    long time;    NSDate *fromdate=[NSDate date];    time=(long)[fromdate timeIntervalSince1970];    return

在SpringMVC中使用过滤器(Filter)过滤容易引发XSS的危险字符

一 简介 如题所示,如果不在服务端对用户的输入信息进行过滤,然后该参数又直接在前台页面中展示,毫无疑问将会容易引发XSS攻击(跨站脚本攻击),比如说这样: form表单中有这么一个字段: <input type="text" id="author" name="author" placeholder="昵称" /> 然后潜在攻击者在该字段上填入以下内容: <script>alert('XSS')<

利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = qrcode.QRCode( version=2, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=20, border=4, ) qr.add_data('你要生成的文件') qr.make(fit=True) img = q

汉字与utf8相互转化

-(void)NSUTF8StringEncodingAction{ //汉字与utf8相互转化 NSString *strA = [@"%E4%B8%AD%E5%9B%BD" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"汉字:%@",strA); NSString *utf8CityNameStr = [@"iOS工程师" stringB

如何过滤 非中文的Unicode码

如何过滤 非中文的Unicode码,如 "我愿为你摘一朵鲜花 \u4e00-\u9fa5

C#编程入门--将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符

将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 #region 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// <summary> /// 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string G

js 识别汉字和全角字符

遇到个问题,需要检测输入框中的字符长度,如果是汉字,算作2个字节??? 然后我就在想,我怎么去识别他是不是汉字呢???首先想到的可能就是 js 的 charCodeAt 方法, ASCII 码,然后就疑惑,那么怎么把汉字和 ASCII 码对应起来呢,想不通,遂百度,发现转发方法的人挺多,但都不说原理,难道都明白???原理还是我来说吧 比较通用的方法都是这样子: 代码 var a="好"; isChinese=!!a.match(/[^\x00-\xff]/ig); //或者 isChi

js判断输入字符串长度(汉字算两个字符,字母数字算一个):例如 要求输入12的字,24个字节

<html> <head> <title>js判断输入字符串长度(汉字算两个字符,字母数字算一个)</title> <style type="text/css"> .pbt { margin-bottom: 10px; } .ie6 .pbt .ftid a, .ie7 .pbt .ftid a { margin-top: 1px; } .cl:after { clear: both; content: ".&quo

JS判断字符串长度(英文占1个字符,中文汉字占2个字符)

//计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else { len ++; } } return len; } 方法二: function strlen(str){