ASP中UTF-8乱码的问题

ASP中UTF-8乱码的问题
1,<%@codepage="65001"%>
2,<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3,Session.CodePage = 65001
4,文件存成 UTF-8

以上都试了,从数据库读取的信息还是会经常乱码(有时也会正常一下);
为何判断是数据库读取的问题,因为所有从数据库读取的信息直接就是乱码;
Access数据库已经转为繁体了;

还在找寻中。。。

========================================================

网上有误传,说没法解决????

还是先说解决方法,每个对外显示的画面都必须加上,特别是针对UTF-8编码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% response.charset="utf-8" %>
<%Session.CodePage=65001%>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />

文件保存为 UTF-8编码格式;
========================================================

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还是不能轻易用的!

 

另外: utf-8编码引起js输出中文乱码的解决办法

 

如果web application的编码规则是utf-8,如网页头中的:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那么js文件中如果有中文输出就会出现乱码,解决此个问题可在引用javascript输出的地方加上charset="gb2312" 或 charset="big5"(假设输出的是Big5繁体字)。

例:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="gb2312"></script>

PS:另一种解决方法是把js文件保存为utf-8编码。
如果web application的编码规则是utf-8,如网页头中的:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那么js文件中如果有中文输出就会出现乱码,解决此个问题可在引用javascript输出的地方加上charset="gb2312" 或 charset="big5"(假设输出的是Big5繁体字)。

例:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="gb2312"></script>

PS:另一种解决方法是把js文件保存为utf-8编码。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET 页面出现乱码问题通常是由于编码设置不正确导致的。以下是一些常见的解决方法: 1. 在页面的 <head> 标签添加以下 meta 标签来指定页面的字符编码: ```html <meta charset="UTF-8" /> ``` 这会将页面的字符编码设置为 UTF-8,以支持文字符。 2. 在 Web.config 文件添加以下配置来设置全局的字符编码: ```xml <configuration> <system.web> <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> </system.web> </configuration> ``` 这样可以确保请求和响应的字符编码都被设置为 UTF-8。 3. 如果您的数据库存储了文数据,并且在从数据库检索数据时出现了乱码,您需要确保数据库的字符集设置正确,并且数据库连接字符串指定了正确的字符编码。例如,在连接字符串添加 charset=utf8 参数来指定使用 UTF-8 编码: ```csharp string connectionString = "Data Source=myDataSource;Initial Catalog=myCatalog;User ID=myUsername;Password=myPassword;charset=utf8"; ``` 4. 确保您在处理文字符串时使用了正确的编码方式。例如,在读取和写入文件、进行网络通信或者进行字符串处理操作时,需要使用正确的编码方式来保证文字符的正确显示。 如果上述方法仍然不能解决您的问题,请提供更多具体信息,例如您遇到问题的具体场景和代码片段,以便我能够给出更准确的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值