简单谈谈Unicode和PHPUTF8编码

关于Unicode和UTF8编码

直到今天,准确的说是刚才,我知道UTF-8编码和Unicode编码是不一样的,有差异之间的尴尬

它们之间有一些联系,看看它们之间的区别:

对UTF-8的长度是不确定的,它可能是1, 2,和3字节

的Unicode的长度是一定的,2个字节(usc-2)

UTF-8可以从Unicode转换为对方

Unicode和UTF-8之间的关系

Unicode(16)

UTF-8编码(二进制)

0000 007f 0xxxxxxx

0080 07ff 110xxxxx 10xxxxxx

0800 1110xxxx 10xxxxxx 10xxxxxx FFFF

上面的表有2个意思。第一个显然是Unicode和UTF-8字符范围的对应关系,而另一个是如何互动与Unicode UTF-8。

先说说转换为Unicode UTF-8

匹配3 UTF-8编码的二进制格式以上,摆脱固定的位置,然后(在非X位置的形式),然后从右到左的一组8,不是8没有收到足够的左,2字节的位16位16,这是由相应的UTF-8 Unicode编码表示,看下面的例子:


在上面的图片中的文本编码是UTF-8,你可以看到它的16进制表示WinHex

复制代码代码如下所示:

> > > = = UTF-8 UTF-8字符的二进制删除固定位置一起为16位二进制= > 16进制

中国= > e6b189 = > 1110011010110001 10001001 = 0110110001001001 = > 6c49

词= > > 1110010110101101 e5ad97 = 10010111 = 0101101101010111 = > 5b57

以下是#对Chrome的命令行下面的运行结果

u6c49



u5b57

单词

#到这里,是将从UTF-8 Unicode是件很容易的事情,看到伪代码转换

读一个字节,11100110

判断UTF-8字符的格式,它属于第三,3字节。

继续读取2字节以获得1110010110101101 10010111

按照格式拆下固定位置101101101010111。

16、左零0101101101010111 = > 5b57



看看从Unicode转换为UTF-8



复制代码代码如下所示:

5b57

访问5b57 Unicode的范围为0800≤5b57 <= FFFF,这5b57 UTF-8有三个字节,作为1110xxxx 10xxxxxx 10xxxxxx形式

得到的二进制编码101101101010111的5b57

Binary encoding of the last step from right to left splicing UTF-8 code 1110010110101101 10010111



谈论这个问题

说今天这个问题的原因,从前面输入很多字,每个字高达30字节UTF-8格式,所以在正面和背面的验证,Javascript中使用Unicode编码,使用UTF-8编码的后端程序,这是现在的解决方案

前端




功能utf8_bytes(STR)
{
var = 0,unicode;
对于(var i = 0;i < str.length;i++)
{
Unicode = str.charcodeat(我);
如果(Unicode < 0x0080){
+透镜;
} else if(Unicode < 0x0800){
= 2;
否则如果}(Unicode <= 0xFFFF){
= 3;
{ }人
把字符必须usc-2!!
}
}
返回伦;
}

#例子
utf8_bytes('asdasdas)

utf8_bytes('yrt蕤淘燕)
十二




后台




# GBK字符串
$ len =细胞(strlen(bin2hex(iconv('gbk ','utf-8字 / 2美元))));
# UTF8字符串
$ len =细胞(strlen(bin2hex(合字)) / 2);


以上是本文的全部内容,希望大家能喜欢。