字节与字符的区别

山中何事,松花酿酒,春水煎茶。

一通分析

PHP代码中字符串的默认编码方式是根据页面的编码方式决定的, 一般情况下我们设置的都是utf-8编码,当然也不排除其他情况;
默认utf8格式

1
2
$str='我';
echo strlen($str); // 3个字节

转成gbk格式

1
2
3
$str='我';
$str = iconv('utf-8','gbk', $str);
echo strlen($str); // 2个字节

出现乱码

1
2
3
4
$str='我';
$str = iconv('utf-8','gbk', $str);
echo strlen($str); // 2个字节
echo $str; // ��

解决乱码

1
2
3
4
5
header("Content-type: text/html; charset=gb2312");
$str='我';
$str = iconv('utf-8','gbk', $str);
echo strlen($str); // 2个字节
echo $str; // ��

或者是将我们的网页的编码方式改成gbk, 因为新版的Chrome已经移除了修改页面编码方式的工具, 不过我们可以借助他的一款扩展程序Set Character Encoding来解决;

注意header头的作用是申明页面渲染的编码方式, 并不能影响PHP代码中相关字符的编码方式

字节和字符

字节(Byte)是计量单位,表示数据量多少,是计算机存储容量的计量单位。一个字节占8位。
字符(Character)计算机中使用的文字和符号,比如’A’、’B’、’$’、’&’等。

  • ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。

  • UTF-8编码中,一个英文字符等于一个字节,一个中文等于三个字节。

  • Unicode编码中,一个英文等于两个字节,一个中文等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

单位换算

1字节(Byte) = 8位(bit) (1B=8位(bit))
1KB=1024B
1MB=1024KB