utf8字符编码检测

本文介绍了如何检测一个字节序列是否符合UTF8字符编码规范,通过比较GBK字符集和UTF8的冲突情况,提供了有效的UTF8编码检测代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原创文章,转帖请注明出处:

http://blog.youkuaiyun.com/palm_civet/archive/2010/11/20/6023857.aspx

 

根据维基百科上的一篇文章编写,比较了一下gbk字符集,utf8检测与gbk冲突的汉字不多基本可以满足要求了。

 

 

gbk:

 

rangebyte 1byte 2code pointscharacters
GB 18030GBK 1.0Codepage 936GB 2312
Level GBK/1A1A9A1FE846728717702682
Level GBK/2B0F7A1FE6,7686,7636,7636,763
Level GBK/381A040FE except 7F6,0806,0806,080 
Level GBK/4AAFE40A0 except 7F8,1608,1608,080
Level GBK/5A8A940A0 except 7F192166166
user-definedAAAFA1FE564 
user-definedF8FEA1FE658
user-definedA1A740A0 except 7F672
total:  23,94021,89721,88621,7917,445

 

 

 

utf8:

 

UTF-8 byte rangeInterpretation
BinaryHexDecimal
00000000-0111111100-7F0-127Single-byte encoding (compatible with US-ASCII)
10000000-1011111180-BF128-191Second, third, or fourth byte of a multi-byte sequence
11000000-11000001C0-C1192-193Overlong encoding: start of 2-byte sequence, but would encode a code point ≤ 7F
11000010-11011111C2-DF194-223Start of 2-byte sequence
11100000-11101111E0-EF224-239Start of 3-byte sequence
11110000-11110100F0-F4240-244Start of 4-byte sequence (including invalid code points 110000 thru 13FFFF)
11110101-11110111F5-F7245-247Restricted by RFC 3629: start of 4-byte sequence for code points ≥ 140000
11111000-11111011F8-FB248-251Restricted by RFC 3629: start of 5-byte sequence
11111100-11111101FC-FD252-253Restricted by RFC 3629: start of 6-byte sequence
11111110-11111111FE-FF254-255Invalid: not defined by original UTF-8 specification

 

实现代码

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值