设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> ASP基础 >> 正文
最新信息
·关于Response.ContentType…
·Request.ServerVariables参…
·让你知道codepage的重要
·Global.asa文件用法大全
·FormatCurrency函数详细用…
·使用Formatnumber()与Form…
·FormatDateTime函数的详细…
·Record记录集的操作方法
·在ASP中使用数据库
·ASP六大对象介绍
资料搜索
热点信息
·如何使Asp页面强制清除缓存…
·常用ASCII 码对照表
·使用Formatnumber()与Form…
·让你知道codepage的重要
·FormatDateTime函数的详细…
·FormatCurrency函数详细用…
·ASP错误代码总结
·Record记录集的操作方法
·Request.ServerVariables参…
·Global.asa文件用法大全
推荐信息
·(ADODB.Command)对象的用法…
·ASP错误代码总结
·ASP教程之ASP基础简介
·ASP VBScript 函数速查表
·关于Response.ContentType…
·Request.ServerVariables参…
·asp关键字函数运算附
·Asp基础教程(上)
·ADO 物件的方法與屬性
·常用ASCII 码对照表


Google
 
让你知道codepage的重要
〖编辑:Cloudy | 浏览:人次〗

这几天研究UTF-8编码,太晕了,把我的看法和各位讨论讨论。欢迎来批啊。以下都是我的想法,哪里有不对的请不吝赐教,帮忙指出来。

相关的题外话:

一、操作系统 window系统内部都是unicode的。文件夹名,文件名等都是unicode的,任何语言系统下都能正常显示。

二、输入法:微软拼音输出的是Unicode的,智能ABC输出是简体中文的(所以智能ABC在非简体中文系统根本不能用,只能打英文)。

三、网页的textarea 网页的textarea是用unicode显示的。所以往里打什么字都能显示。而一些flash做的输入框就不行了。

四、Access2000 access里面保存的数据是unicode的,在任何语言系统下都能显示。如果数据视图查看有些字符不正常,那是因为显示所用的字体不是Unicode字体,换用Arial Unicode MS 字体就能全部显示了。(access帮助,搜索,输入unicode,有说明)

五、Word word里的繁简转换,简体转换到繁体后,内码仍是简体中文的,其实只是简体中的繁体字。

六、ASP内部是Unicode的,所有文本都是Unicode存储的。需要时转换到指定字符集。

首先说下结论: <;%@ codepage=936%>;简体中文 <;%@ codepage=950%>;繁体中文 <;%@ codepage=65001%>;UTF-8

codepage指定了IIS按什么编码读取传递过来的串串(表单提交,地址栏传递等)。

也指定了所有文本变量从Unicode转换到的编码,也就指定了从数据库取出的数据从Unicode转换到的编码。(注意这个,很重要。)

关键字:读取:一个串串,按简体读取是一些字,按繁体读取是一些字,串串本身编码没有变。

转换:系统主动的转换,比如从Unicode的“化”字到Big5的“化”字,内码变成Big5的。如果Big5没有对应的字,保留Unicode形式(&;#xxxx;)

简体中文:化六个结论 Unicode16进制形式:&;#x5316;&;#x516d;&;#x4e2a;&;#x7ED3;&;#x8bba; Unicode10进制形式:&;#21270;&;#20845;&;#20010;&;#32467;&;#35770;

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

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

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

下面举例说明:例一:假设有三个asp页面,典型的留言页面: 1.write.asp 简单的输入表单,提交到add.asp。 <;META http-equiv="Content-Type" content="text/html; charset=big5">; 2.add.asp 接收留言,保存到数据库 <;%@ codepage=936%>; 3.read.asp 从数据库取得留言,显示。 <;%@ codepage=936%>; charset=GB2312 或 <;%@ codepage=950%>; charset=big5

大家可以猜一猜,我在write.asp里用微软拼音输入法输入“化六个讨论”。最后在read.asp里会显示什么样?是不是晕了。让我们从头分析。


此主题相关图片如下:


例二:把例一的add.asp的<;%@ codepage=936%>;改为<;%@ codepage=950%>;,又会怎么样呢?


此主题相关图片如下:


到这里发现了什么? 1.如果输入的文字和Charset对应的不同,一转换,就可能出现Unicode形式的字了。这里就是原因所在。以后整个过程都保留着。 2.Add.asp里codepage决定了保存到数据库的文字,用的是哪个语言对应的Unicode.如codepage=936,那么数据库保存的就是简体中文的Unicode(数据库拿回简体中文系统,一切正常的), codepage=950保存的就是繁体中文的Unicode.(拿回简体中文系统,就不对了)。

3.注意一下串串的变化过程:

1)输入法---CharsetUnicode----指定字符集的映射 2)Charset----表单编码串串简单编码 3)表单解码上步的逆过程,两步抵消了。 4)串串à按codepage读取串串没变,这步有可能“误会读取” 5)转为对应的Unicode Codepage指定字符集----Unicode映射 6)中间处理,进数据库无变化,直接以Unicode形式进入 7)按codepage读取数据库 Unicode----codepage指定字符集的映射 8)显示,按Charset指定字符集读取串串没变。

以例一说明:


此主题相关图片如下:


例二:


此主题相关图片如下:


晕了。现在来用用知识。

案例1。 简体中文系统下跑的好好的代码,放到国外空间上,数据库里乱码,原有的数据也乱码。分析:因为大多数人平时用的都是简体中文系统,默认的codepage=936,所以平时大家不写也没有关系。但到了国外空间问题就出来了。从数据库里的Unicode转换到英文编码去了,所以数据库原有的简体中文转换到英文后,按GB显示自然乱码。如图,新输入的文字显示正常,但数据库里保存的是英文的Unicode的。解决方法:全部加上<;%@codepage=936即可%>;。全程只有简体中文与对应Unicode间的转换。


此主题相关图片如下:


案例二: 简体中文的代码和数据,想转为完全的繁体版,该怎么办?分析:1。代码文件编码全部改为Big5的,文件本身保存编码选繁体。 2.<;%@ codepage=936 %>; 3.Charset=big5 4.access版本无所谓,因为access里的数据是Unicode的。 5.好了,代码可以在纯繁体系统下跑了。 6.遗留问题:原有的简体中文数据读出会有一些问号。效果同例一的950读取,big5显示。因为从简体中文的Unicode转换到繁体中文了,有些字繁体中没有,就会出问号。 7.解决:用一个临时asp页,codepage=65001,读出为简体中文的Unicode,用一个Unicode->;Big5的函数,转为繁体中文,然后写回数据库,应该行了吧?

两个案例完全是我按照理论推导出来了,未经证实。有类似经历的欢迎批评指正。


录入时间:2007-03-12 20:56:30 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号