首先,在介绍浏览器乱码问题之前。我说一下关于文件编码和解码的问题。
假设我使用EditPlus编辑文本,设置Editplus的默认编码环境为ANSI。新建文本,输入:“你好中国”,文件另存为ANSI格式。文件名称为test.txt。
然后,我打开EditPlus,改变EditPlus的默认编码环境为Unicode(详细步骤问度娘就可以)。文件-->打开,打开test.txt文件,发现乱码问题(此处,我自己也有个疑问。我在笔记本上測试时出现乱码。但在台式机測试时,有时候不出现乱码,产生这个问题的解决办法可能和系统环境有关,也可能和EditPlus的版本号有关。我没有再深究。假设有明确的朋友,评论一下,谢谢)。
EditPlus打开test.txt文件,使用的是Unicode编码规则来解码ANSI编码的字符。通过补充知识的内容,显而易见会产生乱码问题。
补充知识:1.“你好中国”相应的ANSI编码为“C4E3 BAC3 D6D0 B9FA”。
“你好中国”相应的Unicode编码为“u4F60 u597D u4E2D u56FD”
2.文件是保存在硬盘上的,而硬盘仅仅能以2进制(通过是否被磁化来区分是1还是0)存储文字等信息,test.txt在硬盘上存储的数据域为“C4E3 BAC3 D6D0 B9FA”的2进制表示形式。
以下,開始介绍浏览器乱码问题,我是用的是phpstrom集成开发环境(默认编码环境为utf-8)
编辑test.php文件代码例如以下:
<?php
echo "汉字会产生乱码";
?
>
通过360浏览器訪问test.php文件,显示结果例如以下:
”姹夊瓧浼氫骇鐢熶贡鐮�“(出现了乱码问题)
分析产生乱码原因:
右击产生乱码的网页,然后点击“编码”,发现此时360浏览器编码为“中文(简体)GBK”,使用GBK解码utf-8编码的字符文件,当然会产生乱码。
解决方法:
1.改变浏览器的编码。点击编码后,选择uft-8,输出的结果显示正常:”汉字会产生乱码“。
2.在设置header charset解决这个问题。test.php文件里加入一行设置编码的代码,例如以下:
<?php
header("Content-type:text/html;Charset=utf-8");
echo "汉字会产生乱码";
?>
(显示结果是正常的)
使用浏览器自带的开发者工具(F12),得到响应头中的信息:
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10
Content-type: text/html;Charset=utf-8
Server: PhpStorm 7.1.3
Content-Length: 21
此时发现360浏览器编码为Unicode(utf-8)。也就是说360浏览器依据响应头中的Charset=utf-8自己主动选择编码为utf-8来解码发送过来的uft-8编码的字符,显示结果正确。