之前我提到“网页保存成什么格式并不重要,重要的是你要告诉浏览器这个网页的编码是什么。计算机也不会自动地猜对你的编码。”
但是有一天我不小心把一个charset=utf-8的网页保存成了ANSI格式,开始还觉得奇怪,我明明用meta标签声明了网页编码,还怎么会乱码呢?
原来之前我的想法是错误的,网页保存的格式也同样重要。即使是Unicode,保存成UTF-8和UTF-16文件在2进制的时候就已经不一样了。
再拿之前的例子举例:
“他”以UTF-8无BOM格式保存的时候,2进制下是:11100100 10111011 10010110
但是以UTF-16小端序保存的时候,2进制下是:11111111 11111110 11010110 01001110
不一样的数据,当然要不一样的编码才能正确解释了。
在使用PHP的fopen()函数也是,如果一个网页是UTF-8编码格式,那么你读取的文件也必须转成UTF-8格式,否则就会乱码。这时候就必须使用iconv函数转换编码。
总结:要使网页不乱码,首先META声明是必要的,其次是网页的保存格式。如果你用的是本地语言,比如中文,meta里必须使charset=gbk或者gb2312,网页保存成ANSI格式。如果用的是UTF-8编码,除了在meta里声明charset=utf-8以外,网页也必须以UTF-8格式保存。
如果使用了MYSQL数据库,也必须设置好数据库的连接方式。