中文汉字编码取值范围
中文汉字编码取值范围
下面主要是UTF-8的取值范围的获取原理
//以单字节的字符串为例子
$str = 'a';
//输出第一个字节;
echo $str[0]; // 结果为a;
echo '<br>';
ASCII码值
echo ord($str[0]); // 结果为97 表示字符 'a' 的ASCII编码的值为 97;
echo '<br>';
echo chr(97); //结果为字符'a'
echo '<br>';
求出ASCII码值的十六进制(可以用计算器) 97 - 61,输出结果
echo "\x61"; //‘\x’表示后两位为16进制 结果为'a'
echo '<hr>';
以下用汉字为例子,编码为UTF-8;(3个字节)
$str = '江';
//普通的输出
echo $str; //结果为'江'
echo '<br>';
//用字节输出
echo $str[0].$str[1].$str[2] ; //结果为 '江'
echo '<br>';
//求出组成'江'的3个字节的ASCII编码的值
echo ord($str[0]).'|'.ord($str[1]).'|'.ord($str[2]); //结果为 '230|177|159';
echo '<br>';
//这时候php也可以通过ASCII值来输出汉字
echo chr(230).chr(177).chr(159); //结果还是 '江';
echo '<br>';
//分别求出ASCII码值的十六进制(可以用计算器).
//230 -- E6 177-B1 159-9F
//这时候用 16进制输出汉字
echo "\xE6\xB1\x9F"; //‘\x’表示后两位为16进制 ,结果还是为'江'
从以上的实验可以得出,UTF-8编码是一个可伸缩的编码方式,对于可以用一个字节代表的,
那么就占用一个字节,对于不能用一个字节表示的,那么就用多个字节表示(像中文汉字就
是用3个字节表示),接着进一步分析.
以下是中文unicode的取值范围.
u4e00-u9fa5 (中文)
'u4e00'转化成2进制('u'表示unicode编码,真正的16进制是'4e00') 为:
0100 1110 0000 0000
根据unicode和UTF-8之间的关系, 4e00 在 0000 0800 和 0000 FFFF 之间,
根据下面的转换表可以得出
******************************************************************
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
******************************************************************
参考:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
根据上面的转换表可以得:
1、最高位置的字节 1110xxxx 的'xxxx' 用 0100 1110 0000 0000 的
的前4为替换,得到第一个字节2进制-1110 0100,
2、第2个自己和第3个字节都是 10xxxxxx 的 'xxxxxx' 分别用 0100 1110 0000 0000
去除最高4位,得到 1110 0000 0000 以6位为切割的得到的2个6位进行替换
最终转化成UTF-8的2进制为:
11100100 10111000 10000000
转化为16进制: E4B880
同理得到’u9fa5‘的二进制为:11101001 10111110 10100101
16进制为:E9BEA5
所以最终结果可以得出:中文汉字UTF-8编码的的取值范围是(因为UTF-8中文编码的
二进制在'11100100 10111000 10000000'和'11101001 10111110 10100101'之间):
第一个字节的取值范围为:E4- E8之间
第二个字节的取值范围为:B8- FF之间
第三个字节的取值范围为:80- FF之间
根据以上的取值范围,我们就可以对编码为UTF-8的字符串进行判断是是否全为中文。以及进行
UTF-8汉字截取功能,下一遍我们将对GBK编码进行分析,讨论;
/*
*****************************************************************************************************
小知识:php的unicode编码转换成汉字,用函数json_encode可以汉字转换成unicode编码格式
*****************************************************************************************************
php unicode 转中文 window
$str=preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", '\u6c5f');
liunx
$str=preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", '\u6c5f');
******************************************************************************************************
******************************************************************************************************
*/

浙公网安备 33010602011771号