吃完饭和同事聊天,讨论一个汉字在UTF-8
中占的字节数,网上说有3个的,也有4个的。
我们常用的,在unicode
中,一个汉字的范围是0X4E00
到0x9FA5
,我们常用这个来匹配汉字,我们尝试把0x9FA5
转成UTF-8
,发现还是3
个字节,那么我想问问,到底还有没有4个字节的汉字,是汉字
。?
补充:根据UNICODE
表,发现汉字出现在多个区间内,不仅仅在0X4E00
到0x9FA5
,只能说平时用这个区间来匹配汉字是一种不完美的写法。
在UNICODE
表中,表明有CJK
的可能就有汉字
,所以不局限于0X4E00
到0x9FA5
,OVER。
纠正一下 不是0X4E00
到0X9FA5
而是 \u4EOO
到\u9FA5
\u0800 - \uFFFF
这个区间内的unicode,以utf-8
编码存储,都是占3个字节,所以上述区间内的汉字,全部都是3个字节
但utf-8本身支持1-6个字节,用以覆盖需要用4个字节来表示的所有unicode字符
现在已经有四个字节的汉字了,比如这个 \U00020001
。
P.S. 字无法直接写出来,SF 直接拒绝存储这种字了…… ٩(๑`^´๑)۶
当前四个字节汉字的范围是 \U00020000 ~ \U0002B81D
,未来还会不断扩大,它们都是些非常生僻的字。
http://en.wikipedia.org/wiki/CJK_Unified_Ideographs#CJK_Unified_Ideographs_Extension_D
php的strlen和mb_strlen计算 刘惜君 这三个汉字结果是多少?