关于编码的二三事(2)
unicode 是字符集, 规定了这个集合里都有什么字符. 同时也携带编码信息, 指明什么位置是什么字符. 具体编码方式的实现有UTF-8 和 UTF-16 等等.
可以用通信的概念来理解:
unicode是信源编码, 对全球字符数字化;
UTF-8是信道编码, 兼容ASCII且对存储和传输更友好.
在PHP里可以用mb_* 函数来操作多字节字符串.
PHP的String实际是由一个由字节组成的数组再加上一个整数指明缓冲区长度. 这里的string其实类似Java的字节数组,里面包含一坨数据,String本身并不负责解释它. 千万不要用$str[$i]来遍历, 可以用mb_substr循环处理.
$str = '一二三';
for ($i = 0; $i < mb_strlen($str); $i++) {
$ch = mb_substr($str, $i, 1);
var_dump($ch);
}
匹配字符串中是否含有中文可以直接
function haveHan($str)
{
if (preg_match('/\p{Han}+/u', $str)) {
echo "该字符含有中文\n";
} else {
echo "该字符不含中文\n";
}
}
在Python3 和 Ruby2 之后都是原生支持Unicode的,可以直接用var[x]来操作.