asp中关于从utf8页面到gb2312页面出现乱码得解决

GB2312编码换为UTF-8编码实战指南 简介:在IT领域,字符编码是文本处理的基础。GB2312作为中文简体常用编码,而UTF-8作为Web通用的Unicode编码,广泛应用于多语言环境。本文深入讲解GB2312与UTF-8的编码原理及差异,并提供从GB2312到UTF-8的完整换流程,涵盖文件读取、编码识别、程序化换(如Python、VBScript脚本)和网页<meta>标签更新等关键步骤。适用于HTML、ASP、PHP、JSP等网页源码的编码迁移,确保内容正确显示,避免乱码问题。 阅读详情

昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312得页面.
于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题,
但偏偏从utf8连接到gb2312得时候就出现了乱码.花了两个小时都搞不掉,
今天再次打开,baidu了下结果.
后来发现两个解决方案
第一:在每个gb2312页面上设置Session.CodePage=936
这样问题就解决了...
第二:从utf8转到gb2312得时候不要用<a>连接.用response.redirect跳转,也能解决.
综上,我理解为
给每个页面设置CodePage这样就把各个页面得编码都独立起来,不再受相连页面得影响
其次<a>标签连接会将页面编码属性也传递给下一个页面,而使用redirect就不会出现这样得情况了,这跟
用asp得环境变量取Request.ServerVariables("HTTP_REFERER")一样,后者就取不到.

另附上
对于ASP编码问题的深入研究与最终解决方案

哪的资料都不如官方资料权威。今天总算从MSDN中择出了ASP编码问题的解决方案。
下面是MSDN中的一段话。
Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects dynamic strings in a single response, and Session.CodePage affects dynamic strings in all responses in a session.
 
这句话解释清楚了@CODEPAGE,Response.CodePage,Session.CodePage 分别的作用是什么。
@CODEPAGE作用于所有静态的字符串,比如某文件中的 const blogname="我的家"
Response.CodePage,Session.CodePage作用于所有动态输出的字符串,比如<%=blogname%>
这句话很关键的是说明了Response.CodePage的作用范围是a single response,而SXNA中声明的Session.CodePage的作用范围是all responses in a session。
再看另外一句话。
If Response.CodePage is not explicitly set in a page, it is implicitly set by Session.CodePage, if sessions are enabled. If sessions are not enabled, Response.CodePage is set by @CodePage, if @CodePage is present in the page. If there is no @CodePage in the page, Response.CodePage is set by the AspCodePage metabase property. If the AspCodePage metabase property is not set, or set to 0, Response.CodePage is set by the system ANSI code page.
 
这句话我乍一看,把意思理解成了这样:在sessions are enabled的时候,如果Response.CodePage没有声明,则Response.CodePage会被Session.CodePage赋值。如果sessions are not enabled的时候, 如果@CodePage已声明,则Response.CodePage会被@CodePage赋值,等等.............
这句话解释了为什么从SXNA中出来以后进入一些别的页面比如oblog,z-blog等等容易出现乱码,因为其他程序没有声明Response.CodePage而恰巧SXNA声明了Session.CodePage,因此一进入SXNA,Session.CodePage立即被赋值(版本不同,有的版本赋了936有的版本赋了65001),而后进入其他程序的时候Response.CodePage马上被Session.CodePage赋值,如果这时Response.CodePage与页面本身编码不一样的话,页面就会出现乱码。所以进入z-blog出现乱码的时候我查了当时的Session.CodePage和Response.CodePage都是936,而进入oblog出现乱码的时候Session.CodePage和Response.CodePage都是65001.就是说要想保证叶面不出现乱码,应该声明Response.CodePage,否则他就会按照Session.CodePage来解释网页(而不是按照@codepage解释网页).
如果仅仅按照上面的解释的话,我实际上是很糊涂的,因为我们都是用的中文操系统,当每一次进入浏览器的时候你可以尝试输出Session.CodePage,能看到他都是936!为什么进入Z-blog的时候他不把默认的Session.CodePage的936赋给Response.CodePage呢?反而把@CodePage给了Response.CodePage?什么情况下Session.CodePage才赋值给Response.CodePage呢?原文的sessions are enabled应该如何理解呢?
也许上面的话应该这样理解:
在Session.CodePage被任何程序声明的时候,如果Response.CodePage没有声明,则Response.CodePage会被Session.CodePage赋值。如果Session.CodePage没有被任何程序声明的时候, 如果@CodePage已声明,则Response.CodePage会被@CodePage赋值,....,最后的页面动态内容部分按照Response.CodePage的值解释。
 
因为Zblog和Oblog都声明了@CodePage,所以,用户刚刚启动完机器然后进入浏览器浏览Zblog和Oblog的时候Response.CodePage会被@CodePage赋值,于是叶面显示正常。
这句话进一步解释了产生乱码的原因
If you set Response.CodePage or Session.CodePage explicitly, do so before sending non-literal strings to the client. If you use literal and non-literal strings in the same page, make sure the code page of @CODEPAGE matches the code page of Response.CodePage, or the literal strings are encoded differently from the non-literal strings and display incorrectly.
 
其中比较有用的一句话是说如果Response.CodePage和@CODEPAGE不一样的话会产生乱码。也就是说当Z-blog的@CODEPAGE=65001而Z-blog的Response.CodePage被Session.CodePage赋为936的时候就会出现乱码,oblog反之亦然。
不知道上面说了这么多解释清楚没有-_-||
下面解释一下为什么SXNA有时会把Session.CodePage赋为936,我有一个版本是这样写的:
<% OriginalCodePage=Session.CodePage %>
.......
<% Session.CodePage=OriginalCodePage %>
 
当用户进入浏览器的时候Session.CodePage默认为936,这个时候的默认936不是程序声明的,因此不会赋给Response.CodePage,当进入SXNA的时候,Session.CodePage被上面那段代码一折腾就变成了程序声明的Session.CodePage=936,因此再进入Zblog的时候就把936给了Response.CodePage。
至此,全部原因已经分析清楚了。
因此说,保证asp叶面一定不会出现乱码的代码应该是这样的:(假定是UTF-8的叶子)
<%@ CODEPAGE=65001 %>
<% Response.CodePage=65001%>
<% Response.Charset="UTF-8" %>
 
进一步说明为什么要加Response.Charset,因为MSDN说应该加...呵呵
If the code page is set in a page, then Response.Charset should also be set.
 
另外,文件的编码格式应该与@CODEPAGE一样:
The file format of a Web page must be the same as the @CODEPAGE used in the page.
 
这就是为什么zblog,pjblog等一些程序要吧文件存成UTF8编码格式的原因.
综上,如果所有的程序都声明了Response.CodePage就不会被Session.CodePage干扰而出现乱码了。所以Session.CodePage还是不能轻易用的!

ASP中Utf-8与Gb2312编码乱码问题的解决方法 页面编码声明 ASP程序在同一个站点中,如果有UTF-8编码的程序,又有GB2312编码的程序时,在浏览UTF-8编码的页面后,再浏览当前网站GB2312页面GB2312编码的页面就会出现乱码 立即下载

相关推荐

ASP GB2312UTF8编码相互换的解决方案

最好的方法: 先说一下基本的东西: UTF-8 简体中文 繁体中文 美国/加拿大英语 日文 韩文 俄文 codepage指定了IIS按什么编码读取传递过来的串串(表单提交,地址栏传递等)。 出乱码的原因也就是网站要整合的时候模块编码不相同引起的。 就像我的博客相同,整合的时候都会出这个问题,因为BLOG是Utf-8的, 近来很多网友都在为这个问题咨询

wangdaxu332的专栏 1783

ASP中Utf-8与Gb2312编码乱码问题的解决方法

在浏览utf-8编码的页面后,再浏览当前网站gb2312页面gb2312编码的页面就会出现乱码。在各网页中根据需要可以修改。

goolean的专栏 1913

@CODEPAGE

The @CODEPAGE processing directive specifies how literal (static) strings are encoded in a Web page. A code page is a character set, which can include numbers, punctuation marks, and other glyphs. Cod

拓荒者的跋涉 1437

ASP字符换:UTF-8与GB2312

UTF-8GB2312函数用途:將UTF-8編碼漢字轉換為GB2312碼,兼容英文和數字 版權:雖說是原創,其實也參考了別人的部分算法 用法:Response.write UTF2GB("%E9%83%BD%E5%B8%82%E6%83%85%E7%B7%A3 %E6%98%9F%E5%BA%A7") function UTF2GB(UTFStr) for Dig=1 to len(U

魔拉宝 1万+

asp关于从utf8页面gb2312页面出现乱码解决()

昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312页面.于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题,但偏偏从utf8连接到gb2312得时候就出现了乱码.花了两个小时都搞不掉,今天再次打开,baidu了下结果.后来发现两个解决方案第一:在每个gb2312页面上设置Session.CodePage=936这样问题就解决了...第二:从utf8gb

Eric.liu's Tech Space 5292

asp关于从utf8页面gb2312页面出现乱码解决

(载,原网址记不清楚了) 昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312页面.于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题,但偏偏从utf8连接到gb2312得时候就出现了乱码.花了两个小时都搞不掉,今天再次打开,baidu了下结果.后来发现两个解决方案第一:在每个gb2312页面上设置Session.CodePage=93...

weixin_30894583的博客 104

responseBody乱码解决方案

常有人说,他们在使用XMLHTTP过程中,总是为中文乱码的问题烦恼。本人查阅了一些资料,结果令我失望,大家都是使用ASP服务器端技术解决该问题。     先分析一下为何会出现中文乱码的问题。原因很简单:XMLHTTP得到Response时假定Response是UTF8编码的,它把含GB2312编码的HTML当成UTF8格式,因此,出现了中文乱码。     那么,除了使用ASP服务器端脚本技术外

jincenlong58的专栏 4422

xmlhttp 乱码解决方法UTF8,GB2312 编码 解码)

用XMLHTTP Post Form时的表单乱码有两方面的原因Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编码引起的乱码。换句话说,本文主要解决两个问题怎样正确Post中文内容&怎样正确显示得到的...

wenxiehao 709

UTF-8 GB2312 中文乱码解决方案汇总

来源: http://hi.baidu.com/zhenyk/blog/item/f5158f5108d3cc898d543067.html string utfinfo = "document.write(/"alert('aa你好么??');/");"; string gb2312info = string.Empty; Encoding utf8 = Encoding.UTF8; Encoding gb2312 = Encoding.GetEncoding("gb2312"); //

爱飞的蒲公英 6790

把UTF-8编码换为GB2312编码

最近在做的广告系统中,碰到了一个问题,广告系统采用的UTF-8编码,而一些使用这套广告系统的频道页面使用的是GB2312编码。当然也有使用UTF-8编码的频道使用这套广告系统。频道页面是通过嵌入类似如下的代码方式,来调用广告的。具体那个时间显示那个广告,或者那些广告组合是广告系统自己处理的。<!--Code highlighting produced by Actipro CodeHi

eunsikehuang的专栏 3073

asp.net把utf-8编码换为gb2312编码

最近在做的系统中,碰到了一个问题,交易系统采用的utf-8编码,而一些支持系统使用的是gb2312编码。不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。asp.net 中,如果要修改输出页面的编码,可以通过修改web.config中以下配置信息以上只是修改整体的默认编码,如果只有某个页的编码需要修改,asp.net 中则可以简单的使用下面代码:注:加到

小蔡哥的专栏 1388

java hex解码 gb2312_XMLHTTP 乱码解决方法(UTF8,GB2312 编码 解码)

XMLHTTP 乱码解决方法(UTF8,GB2312 编码 解码)(附带解决DHTMLX不能用中文的问题)在数据发送一方,利用 javascript 的 escape 函数事先将所有中文换成英文编码并保存(也可以用 ASP 等其它语言的函数实时换输出)。在数据接收一方,利用 javascript 的 unescape 函数将所有英文编码还原。由于 Ajax 不论任何编码都能正常传送英文,所以...

weixin_35995565的博客 664

ASP下Ajax的GB2312编码问题

被编码问题困扰了1天了,找到了几个解决方案,虽然问题没有最终解决,但可以为以后编写ajax应用提供一些参考。  废话少说,先简要描述一下问题所在:JS 内部使用UTF-8 编码,本身js用GB2312书写。ASP 输出使用GB2312,Codepage = 936JS -> ASP ,escape后的程序以utf-8编码发送给aspasp端必须进行编码换。ASP -

Lazy working,keep walking. 1274

UTF-8编码ASP页面 输出 GB2312GBK)编码的变量 超级简单

我自己的页面用的是UTF-8编码。但是问题是在这个页面下,其中有一段变量要用到md5加密后传出,此md5处理带有中文的变量,则加密结果和对方用此变量的加密结果不同。其原因在于变量传出去时是UTF-8的内码,对方收到后用gb2312解释。因此要解决这个问题,一定要在加密前把变量gb2312的编码。网上找了N多的方法,包括用各种utf2gb的函数。。均为无效或差强人意,有的虽然编码加密成功了,但传到对方显示出来是组乱码。正当山穷水尽之际,突然发现可以在同一个页面中进行代码编码方式的切换。这样可以保证整个网站

jinxbin的专栏 9069

mysql gb2312utf8_如何把数据从GB2312换成UTF-8

我使用了iconv和mb_convert_encoding两个函数都试了,然后发现结果是一样的,都会出现各种问题,不是哪里少字了就是直接错误,请问大神怎么解决啊回复讨论(解决方案)iconv("GB2312","UTF-8//IGNORE",$data)确定 原数据是 GB2312编码吗是的 确定了 是ANSI格式的是的 确定了 是ANSI格式的你的文件页面编码是什么? 要不把代码贴出来看看是...

weixin_42429956的博客 478

xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法

    首先xmlHttpRequest 使用Post时,需要对数据进行编码,在客户端一般使用js中的encodeURIComponent 在web.config中指定了gb2312编码后,在aspx页面中如果直接使用 Request[xxx]那么结果将会出现乱码,原

WDFrog的专栏 1078

Asp.net把UTF-8编码换为GB2312编码()

最近在做的系统中,碰到了一个问题,交易系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码。 不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。 as...

akpaul6677的博客 134
上一篇: ASP实现隐藏下载地址和防盗
下一篇: 一个ASP站内搜索的实例源代码
魔拉宝
博客等级 码龄20年 133粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值