网络编程
位置:首页>> 网络编程>> JavaScript>> 客户端和服务端的编码“陷阱”

客户端和服务端的编码“陷阱”

作者:LuLi 来源:SimpleLife 发布时间:2007-12-21 19:19:00 

标签:乱码,编码,ajax,数据库

为什么页面出现乱码?为什么数据库里出现乱码?为什么这些乱码的出现几率飘忽不定了?诸如此类的乱码问题困扰了很多WEB开发人员。假如不将这背后的细节扫扫清楚,那么我们的确不知道什么时候乱码又出现了,如果你确实没有时间关心这些细节,那么你可以直接看文章最后的总结。

我们所遇到的乱码多数情况是发生在有中文字符的时候,这是由于计算机各种编码的标准不同而造成的,首先我们有必要了解一下计算机编码的发展史,ASCII码、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16、ISO-8859-1…,简而言之它们都是为了满足不同时期,不同对象的需求,以自己的一套标准尽可能多地表示所需要的符号信息,如果你需要了解得更深入,可以google一下相关资料。(PS:计算机领域的很多技术发展都是很有意思的)正是因为有这么多不同标准的编码存在,稍不留神我们就走入了编码“陷阱”,如何避免这些“陷阱”了?

一、注意文件编码和字符编码

用记事本建立一个新的文件,默认是ASCII码,我们另存为其他编码类型,例如unicode,如果用UtraEdit或者Emeditor编辑,你会发现编码类型的选择范围更大。试想一下如果在编码A类型的文件中存在了编码B的字符会有什么现象了?多数情况下会出现乱码。例如我们在一个文件编码为GB2312的网页文件中写入了UTF-8的字符,那么这个网页浏览的时候就出现了乱码,而我们在浏览器中再自己设定一下编码为UTF-8,页面就恢复正常了。

当然也有例外情况,如果这两种编码是扩展关系,其中的部分字符编码是相同的,这个时候当然不会出现乱码了,例如GBK就兼容了BG2312的所有字符。(PS:这里有个有趣的现象,新建一个记事本,然后输入“联通”两个字,保存再打开,你会发现它变成了乱码。具体原因你可以google一下,简单说来是记事本错误地识别了字符编码。)

第一条原则:保持文件编码和字符编码的一致性。(PS:尤其是在客户端使用编辑器更改文件的编码类型时更要注意,有些编辑器只改变了文件编码,而没有将内部的字符编码同样做转换。)

二、 指定网页编码

目前,主流浏览器都遵循RFC标准,他们会优先考虑服务端对Header中的content-type属性的设置,无论你是在server层做的全局设置,还是你的服务端脚本临时设置,你都需要清楚地知道网页否指定了你预定的编码。

如果服务端对Header没有做处理,那么浏览器会识别Meta信息中的content-type,例如,这个网页的编码就指定了是UTF-8,如果其中存在GB的字符,那么乱码就出现了。
  
  第二条原则:清楚地为网页指定我们预定的编码,最便捷的方式是在服务端指定。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com