手机
当前位置:查字典教程网 >编程开发 >php教程 >简单谈谈php中的unicode和utf8编码
简单谈谈php中的unicode和utf8编码
摘要:重新认识unicode和utf8编码直到今天,准确的说是刚才,我才知道UTF-8编码和Unicode编码是不一样的,是有区别的囧他们之间是有...

重新认识unicode和utf8编码

直到今天,准确的说是刚才,我才知道UTF-8编码和Unicode编码是不一样的,是有区别的囧
他们之间是有一定的联系的,看看他们的区别:
UTF-8的长度是不一定的,有可能是1、2、3字节
Unicode长度一定,2个字节(USC-2)
UTF-8可以和Unicode互相转换

unicode和utf8的关系

Unicode(16进制)

UTF-8(二进制)

0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx

上面的表格有2个意思,第一个显而易见就是说Unicode和UTF-8字符范围的对应,还有一个可以看出Unicode怎么和UTF-8互相转换:

先说UTF-8到Unicode的转换

UTF-8编码的二进制和上面的3种格式进行匹配,匹配到之后去掉固定位(表格中的非x位置),然后从右到左每8位一组,不够8位左边不领,凑够2个字节16 bits,这16 bits所表示的就是UTF-8对应的Unicode编码,看看下面几个例子:

简单谈谈php中的unicode和utf8编码1

上面图片中的文字编码格式为UTF-8,可以用WinHex看到其16进制表示

代码如下:


字符 => UTF-8 => UTF-8二进制=> 去掉固定位置凑够16位的二进制 => 16进制

汉 => E6B189 => 11100110 10110001 10001001 => 01101100 01001001 => 6C49
字 => E5AD97 => 11100101 10101101 10010111 => 01011011 01010111 => 5B57

#下面是在chrome命令行下面运行的结果
'u6C49'
"汉"
'u5B57'
"字"

#到这里的话,从UTF-8转换到Unicode已经是一件非常容易的事了,看看转换的伪代码
读取一个字节,11100110
判断该UTF-8字符的格式,属于第三种,3个字节
继续读取2个字节得到 11100101 10101101 10010111
按照格式去掉固定位 1011011 01010111
不够16位,左边补零 01011011 01010111 => 5B57

【简单谈谈php中的unicode和utf8编码】相关文章:

php以fastCGI的方式运行时文件系统权限问题及解决方法

深入浅出php socket编程

php中的时间处理

PHP滚动日志的代码实现

不用iconv库的gb2312与utf-8的互换函数

php结合安卓客户端实现查询交互实例

PHP获取当前日期和时间及格式化方法参数

PHP关联链接添加方法

php中header跳转使用include包含解决参数丢失问题

用php实现gb2312和unicode间的编码转换

精品推荐
分类导航