关于网站开发文件编码的一点总结[转]

在N多的项目开发中,编码,乱码,让我头痛过无数次。就昨天难得有人请吃饭,吃蛇肉啊,我还真没吃过,一个电话说乱码,还真不得安宁啊。
  从不解到大概了解,从大概了解到基本认识,从基本认识到决心要彻底清楚。。。。。到现在,虽然还是没有一个刨根问底式的全面了解,但还是忍不住要总结一下了。

  首先说,在一个项目实施之前,应该确定好统一使用的编码格式。就目前来说,个人觉得还是统一使用UTF-8编码。还有,文件的编码,重要的不是代码里声明的编码是什么,而是存储或者输出的时候采用的编码是什么,这才是真正意义上的文件采用的编码。比如网页代码里声明使用gb2312编码,但如果这个文件存储或输出的时候采用的是UTF-8,那么这个声明是没有多大意义的。就是说,我们甚至不要去理会,不要去在代码里声明采用的编码,文件存的是什么就是什么。

  编码不是网页才有,我们平时用的都是ANSI,也就是美国的标准码,也就是ASCII码嘛,但是这个ASCII码表不能表示中文,所以呢,伟大勤劳勇敢聪明善良的中国人民修改扩展了ASCII码表,创造了适合中文的GB2312码.但是后来觉的还是不够用,就又扩展了,出了GBK ,然后又是GB18030等等。


  可是每个国家都有自己的一套编码标准,很不方便,我要显示韩文,不好意思,你得安装支持韩文编码的软件,这叫一个麻烦,后来就出现了UNICODE,然后又出现了UTF-8。

  现在我们用的默认都是ANSI编码,如果你想同时显示日文,韩文,拉丁语等等,可以使用UTF-8,而不要是用GB2312。

  当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。 
其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。

  当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码: 
检测文件头标识,提示用户选择,根据一定的规则猜测 
最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表: 
EF BB BF UTF-8 
FE FF UTF-16/UCS-2, little endian 
FF FE UTF-16/UCS-2, big endian 
FF FE 00 00 UTF-32/UCS-4, little endian. 
00 00 FE FF UTF-32/UCS-4, big-endian.

网站项目里,一些常用软件的编码问题总结:

一:Dreamweaver
1.简体中文版本的安装后,默认是gb2312编码格式,可以在首选项里进行更改。
2.新建文档时,会自动在代码声明里加上采用的编码,其实就是这里,把很多人给弄糊涂了。在这个软件里,保存的时候,会自动根据声明的编码进行保存,比如声明的是charset=gb2312,那么就算现在首选项里选择的是UTF-8,但保存时还是会根据这个声明保存成gb2312,这个还好可以自动判断保存,不会冲突。可是有很多情况下不想开这软件浪费时间,就直接记事本打开,然后把这个声明改了,这个时候,记事本是不会自动判断的,保存的时候还是之前的编码,而声明里使用的确实另一个编码,这样问题就来了。
所以说,就前面说过的,不用理会声明,也不要去声明,存的是什么就是什么。
统一都使用UTF-8的好,不会产生那么多的冲突乱码问题

二:asp.net
asp.net安装完后默认的是UTF-8的编码。这就是为什么很多项目开发中,前台用Dreamweaver做好了,后台用asp.net加程序,就出现乱码情况了。大家都采用默认的,GB2312和UTF-8当然冲突了。
ASP.NET的编码更改可以在Web.Config配置文件里更改

三:FLASH
从Flash MX开始,Flash就开始支持Unicode编码,默认的也是Unicode编码,它和UTF-8几乎接近,我姑且说它默认的就是UTF-8吧,不想说得太深了,我们只要解决问题。
FLASH要加载外部文本文件,页面,XML等的时候,需要解读和显示的时候


1.如果外部文件用的UTF-8编码的,那FLASH里无需改动,默认就行
2.如果外部文件用的是别的编码,比如GB2312,那么就要在第一帧动作里写上
System.userCodePage=true;
//使用运行播放器的操作系统的传统代码页来解释外部文本文件

转自:http://www.fwl.name/article.asp?id=73

posted @ 2008-01-09 15:16  IamV  阅读(550)  评论(0编辑  收藏  举报