php中unicode和utf8编码的区别是什么

  介绍

今天就跟大家聊聊有关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编码,看看下面几个例子:

 php中unicode和utf8编码的区别是什么

上面图片中的文字编码格式为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编码的区别是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

php中unicode和utf8编码的区别是什么