今天就跟大家聊聊有关php中unicode和utf8编码的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>重新认识unicode和utf8编码强>
他们之间是有一定的联系的,看看他们的区别:
utf - 8的长度是不一定的,有可能是1,2,3字节
unicode长度一定,2个字节(USC-2)
utf - 8可以和unicode互相转换
unicode和utf8的关系
unicode(16进制)
utf - 8(二进制)
0 0000 - 007 f xxxxxxx
0080 - 07年110 ff xxxxx 10 xxxxxx
0800 -飞行符1110 xxxx 10 xxxxxx xxxxxx
上面的表格有两个意思,第一个显而易见就是说unicode和utf - 8字符范围的对应,还有一个可以看出unicode怎么和utf - 8互相转换:
<强>先说到unicode utf - 8的转换强>
utf - 8编码的二进制和上面的3种格式进行匹配,匹配到之后去掉固定位(表格中的非x位置),然后从右到左每8位一组,不够8位左边不领,凑够2个字节16位,这16位所表示的就是utf - 8对应的unicode编码,看看下面几个例子:
上面图片中的文字编码格式为utf - 8,可以用WinHex看到其16进制表示
代码如下:
字符,=比;UTF-8 ,=比;utf - 8二进制=比;去掉固定位置凑够16位的二进制=比;16进制
汉,=比;E6B189=比;11100110 10110001 11100110,=比;01101100 01001001=比;6 c49
字,=比;E5AD97=比;11100101 10101101 11100101,=比;01011011,01010111=比;5 b57
#下面是在chrome命令行下面运行的结果
& # 39; \ u6C49& # 39;
“汉“
& # 39; \ u5B57& # 39;
“字“
#到这里的话,从utf - 8转换到Unicode已经是一件非常容易的事了,看看转换的伪代码
读取一个字节,11100110
判断该utf - 8字符的格式,属于第三种,3个字节
继续读取2个字节得到11100101 10101101 11100101
按照格式去掉固定位,,,,1011011 01010111
不够16位,左边补零,,,01011011 01010111,=比;5 b57
再看看从Unicode到utf - 8的转换
代码如下:
5 b57
获取5 b57所在的Unicode范围,0800 & lt;=5 b57 & lt;=飞行符,得知5 b57的utf - 8有三个字节,形式为1110 xxxx 10 xxxxxx xxxxxx
获取5 b57的二进制编码101101101010111
用上一步骤的二进制编码从右至左拼接utf - 8编码11100101 10101101 11100101
<强>说说问题强>
再说说今天这个问题的起因,从前端输入很多单词,utf - 8格式每个词最多30个字节,因此会在前端和后台分别做验证,javascript用的是Unicode编码,后端程序用的是utf - 8编码,现在的解决办法是这样
前端
function utf8_bytes (str) { ,var len =, 0,, unicode; ,(var 小姐:=,0;,小姐:& lt;, str.length;,我+ +) ,{=,,unicode  str.charCodeAt(我); ,如果(unicode & lt;, 0 x0080), { + + len才能; ,}else 如果(unicode & lt;, 0 x0800), { len 才能+=,2; ,}else 如果(unicode & lt;=, 0 xffff), { +=len 才能;3; ,}else { throw 才能“characters  must be USC-2 ! !“ ,} ,} ,return 兰; } #例子 utf8_bytes (& # 39; asdasdas& # 39;) 8 utf8_bytes (& # 39; yrt燕睿涛& # 39;) 12
后台
#对于GBK字符串 $ len =,装天花板(strlen (bin2hex (iconv (& # 39; gbk # 39;,, & # 39; utf - 8 # 39;,,字美元)))/2); #对于UTF8字符串 len 美元;=,装天花板(strlen (bin2hex(词)美元)/2);
看完上述内容,你们对php中unicode和utf8编码的区别是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。