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

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

为什么页面出现乱码?为什么数据库里出现乱码?为什么这些乱码的出现几率飘忽不定了?诸如此类的乱码问题困扰了很多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的字符,那么乱码就出现了。
  
  第二条原则:清楚地为网页指定我们预定的编码,最便捷的方式是在服务端指定。

标签:乱码,编码,ajax,数据库
0
投稿

猜你喜欢

  • oracle 日期函数

    2010-07-23 13:32:00
  • 利用ADODB.Stream使用浏览器下载服务器文件

    2008-10-09 12:42:00
  • 浅谈javascript面向对象编程

    2009-03-03 12:04:00
  • 精细分析 SQL server服务器的内存配置

    2009-01-19 13:56:00
  • FrontPage XP中的设计技巧

    2008-07-17 10:49:00
  • xmlHTTP技术资料

    2008-01-05 13:39:00
  • Dreamweaver4探谜系列(1)

    2010-09-05 21:12:00
  • 纯ASP(VBscript)写的全球IP地址搜索程序

    2007-09-27 13:28:00
  • CSS属性behavior的语法及介绍

    2010-01-13 12:40:00
  • MySQL也能并发导入数据

    2010-03-25 10:38:00
  • asp根据出生时间判断生肖

    2008-03-24 19:49:00
  • WEB2.0网页制作标准教程(3)定义语言编码

    2007-11-13 13:23:00
  • Asp定时执行操作、各种网页定时操作详解

    2008-06-10 17:32:00
  • js求一组数中的最大数

    2008-04-10 12:00:00
  • SQL查询重复记录

    2011-03-27 09:06:00
  • Mysql常用命令行大全

    2009-01-15 16:34:00
  • Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器

    2007-09-23 12:43:00
  • { hide_text } CSS文字隐藏总结报告

    2010-06-13 17:19:00
  • Oracle SID存在解決方法

    2009-06-19 17:34:00
  • 一些SQL查询语法参考

    2007-10-14 11:56:00
  • asp之家 网络编程 m.aspxhome.com