简单谈谈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);
以上是本文的全部内容,希望大家能喜欢。