前日有一个同事在做右键菜单时,出现了弹出的菜单内容为乱码的情况。询问我时,我感觉应该是编码的问题。但是同事说在网上的那个例子显示的是正确的,但是到了他程序里就不可以了。于是我让他把代码拿出来看了一下,发现没有什么问题,于是让他重新添加一遍代码。这时我发他,他在做单独的js文件时是粘到记事本中的,然后保存后放入.net项目中。这时我提醒他在保存记事本文件时,选择utf8编码,结果菜单能正确的显示中文。

学E34网968页i2ZN网(http://www.xwangye.com)

于是想到总结一下网页编码的问题。我们做网页的人,经常要接触到各种各样的编码。其实我们可以分为如下几种情况。

学E34网968页i2ZN网(http://www.xwangye.com)

1.文件编码。

学E34网968页i2ZN网(http://www.xwangye.com)

我们经常在使用记事本保存文件时,在选择文件类型的下面有一个编码格式。这里指明了保存的文件的编码格式。

学E34网968页i2ZN网(http://www.xwangye.com)

学E34网968页i2ZN网(http://www.xwangye.com)

2.网页编码:我们的网页中有一个meta标记,用来指明网页的编码。

学E34网968页i2ZN网(http://www.xwangye.com)

代码如下:

学E34网968页i2ZN网(http://www.xwangye.com)

学E34网968页i2ZN网(http://www.xwangye.com)

网页中的meta标记告诉浏览器,应该使用的编码,以使浏览器能正确的识别出网页的格式。

学E34网968页i2ZN网(http://www.xwangye.com)

一般建议把指定编码的代码放在title的前面,以使浏览器能正确的识别出title中的汉字等,特别的对于那些utf-8的网页。

学E34网968页i2ZN网(http://www.xwangye.com)

 

学E34网968页i2ZN网(http://www.xwangye.com)

另外,网页中还经常要引用一些外部的js文件,如果js文件的编码与网页的编码不一致,这里js的内容中如果有中文,此时也会出现乱码。解决方法就是在引用时指明js的编码,或者重新按相应格式保存一下js文件。

学E34网968页i2ZN网(http://www.xwangye.com)

学E34网968页i2ZN网(http://www.xwangye.com)

3.服务器端编码:codepage。

学E34网968页i2ZN网(http://www.xwangye.com)

我们常见的一些codepage 有936(gb2312) 65001(utf8)等。如

学E34网968页i2ZN网(http://www.xwangye.com)

以下是代码片段:
<%@ codepage=936%>简体中文
<%@ codepage=950%>繁体中文
<%@ codepage=65001%>UTF-8

学E34网968页i2ZN网(http://www.xwangye.com)

codepage指定了IIS按什么编码读取传递过来的串串(表单提交,地址栏传递等)。也指定了所有文本变量从Unicode转换到的编码,也就指定了从数据库取出的数据从Unicode转换到的编码。(注意这个,很重要。)

关键字:
读取:一个串串,按简体读取是一些字,按繁体读取是一些字,串串本身编码没有变。
转换:系统主动的转换,比如从Unicode的“化”字到Big5的“化”字,内码变成Big5的。如果Big5没有对应的字,保留Unicode形式(&#xxxx;)

简体中文:化六个结论
Unicode16进制形式:化六个结论
Unicode10进制形式:化六个结论

下面是我推测出来的编码转换的过程:
客户端:输入法Unicode--输入框unicode--从Unicode按charset转换到对应编码()--表单发送编码

服务器端:IIS解开表单编码--按codepage指定编码读取--转换到对应的Unicode--可以用request("")读取了--进行一些处理--以Unicode编码保存到数据库

服务器端:读取数据库的Unicode数据,转换到codepage指定编码---生成源代码--IE按charset读取显示。

学E34网968页i2ZN网(http://www.xwangye.com)

[1] [2]  下一页