页面编码问题,ASP页面向ASP.NET页面传递中文信息,乱码到底怎么解决??

秋的红果实 2011-11-06 09:03:23
都弄2,3天了,还是没有解决,就卡在这里了。我的代码如下所示:
asp页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>无标题页</title>
</head>
<body>
<%
dim uname
uname="汉字信息"
%>

<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=uname %>" target="_blank">click</a>

<br />其他静态信息
</body>
</html>

.NET cs文件
public partial class _1 : System.Web.UI.Page
{
static string username;
protected void Page_Load(object sender, EventArgs e)
{
username = Request["p"].ToString();
Response.Write(username);

}
}

根据一位网友的方法,我在.NET的config里已经加入了统一编码的代码:<globalization requestEncoding="GB2312" responseEncoding="GB2312" culture="zh-CN" fileEncoding="GB2312"/>,这样中文参数输出就不是乱码了,但前提是,asp页面编码必须是GB2312,此编码下,asp页面其他静态信息变成乱码了,最终还是不行

我把config里的GB2312都改成utf-8,asp页面也是utf-8,我以为都统一成utf-8了,但中文参数输出还是乱码

到底怎么解决乱码问题?
...全文
1097 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxmark 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 from_taiwan 的回复:]
引用 24 楼 gxmark 的回复:
引用 19 楼 from_taiwan 的回复:
感谢各位大侠了

根据大家的指导,问题解决了,(1)发送要加上URLEncode (2)在web.config里加上<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding=……
[/Quote]
可以通过post参数,而不是url参数进行传递的.
btw:
我测试了一下,感觉开始你的代码中指需要修改
<globalization requestEncoding="GB2312" responseEncoding="GB2312" culture="zh-CN" fileEncoding="GB2312"/>
为:
<globalization requestEncoding="GB2312" responseEncoding="UTF-8" culture="zh-CN" fileEncoding="GB2312"/>
就能解决中文url参数传递的问题了.
你可以具体试一下
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 gxmark 的回复:]
引用 19 楼 from_taiwan 的回复:
感谢各位大侠了

根据大家的指导,问题解决了,(1)发送要加上URLEncode (2)在web.config里加上<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding="utf-8"/>就可以了,按理说.NET……
[/Quote]那,象我这种情况(主体用vbscript,个别功能用C#),他们间通信时,除了通过URL传递外,还有什么更好的方法?
gxmark 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 from_taiwan 的回复:]
感谢各位大侠了

根据大家的指导,问题解决了,(1)发送要加上URLEncode (2)在web.config里加上<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding="utf-8"/>就可以了,按理说.NET默认是utf8,不知为什么,我是租的虚拟服务器

……
[/Quote]
其实这里最主要的问题是你想给asp.net页面传递未经编码的原始中文汉字的参数,这对于asp.net本身来说就是一个难题,所以不管怎么处理都很难达到效果,虽然已经有解决方案(http://www.cnblogs.com/liubiqu/archive/2005/05/24/161506.html)了,但是效果也不是很理想.
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 net_lover 的回复:]
你这是asp页面向asp.net传递参数的吗?
你问题中的
<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=uname %>" target="_blank">click</a>

代码吗?

如果你要得到
<FORM id=form1 name=form1 action=uploadpic.aspx?p=%u795e%u5dde%……
[/Quote]<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=uname %>" target="_blank">click</a>是临时搭建的测试环境,为了简化问题,弄了个临时环境

<a href="http://www.xxx.com/bbs/uploadpic.aspx?p=<%=Server.UrlEncode(Rs("BS_UserName")) %>" target="_blank">上传我的头像</a></td>是实际环境

嗯,学习了很多,太感激了
孟子E章 2011-11-06
  • 打赏
  • 举报
回复
URLEncode跟语言无关,
vb
java
php都是一样的
gxmark 2011-11-06
  • 打赏
  • 举报
回复
URLEncode在asp和asp.net中是表现不同的,下面有说明:
http://blog.csdn.net/zhangfeng1133/article/details/384660更多的关于request的介绍,下面连接说的很详细了,可以参考以下
http://axislover.blog.163.com/blog/static/1077651520091205630278/
孟子E章 2011-11-06
  • 打赏
  • 举报
回复
你这是asp页面向asp.net传递参数的吗?
你问题中的
<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=uname %>" target="_blank">click</a>

代码吗?

如果你要得到
<FORM id=form1 name=form1 action=uploadpic.aspx?p=%u795e%u5dde%u4e07%u4e8b%ufffd
method=post encType=multipart/form-data>

中的p参数内容
String p = Request.QueryString["p"];
就可以了

另外,就是用户登录后,进入用户中心,一般传递是是用户id之类的,是不传非数字非字母之类的信息到其他页面作为标识该用户信息的
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
感谢各位大侠了

根据大家的指导,问题解决了,(1)发送要加上URLEncode (2)在web.config里加上<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding="utf-8"/>就可以了,按理说.NET默认是utf8,不知为什么,我是租的虚拟服务器

还想问下:
1、URLEncode是对立于语言的东西吗?它属于html吗?在vb里和C#里,功能一样吗?

2、从出问题的网页html源代码怎么查找问题所在?
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
功能很简单,就是用户登录后,进入用户中心,有个上传头像的功能,保存图片到数据库是用c#写的,其他都是用VB写的
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
奥,我真是笨,要那个源码啊,如下:(实际环境)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.ztx123.com/bbs/uploadpic.aspx?p=神州万事通 -->
<HTML><HEAD><TITLE>无标题页</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.3790.4904" name=GENERATOR></HEAD>
<BODY style="MARGIN-TOP: 0px; BACKGROUND-IMAGE: url(../image/beijing.jpg)">神州万事�

<STYLE type=text/css>.style1 {
MARGIN: 30px; WIDTH: 1024px
}
.style2 {
FONT-WEIGHT: bold; COLOR: #0066cc
}
</STYLE>

<FORM id=form1 name=form1 action=uploadpic.aspx?p=%u795e%u5dde%u4e07%u4e8b%ufffd
method=post encType=multipart/form-data>
<DIV><INPUT id=__VIEWSTATE type=hidden
value=/wEPDwULLTE1Njk2NzU0NjJkZOnnGn7uh+bDsG8Djs127GMFSyCY name=__VIEWSTATE>
</DIV>
<DIV><INPUT id=__EVENTVALIDATION type=hidden
value=/wEWAgLrtu2YBgL9kpmPAVkPfFVAVXuZVGR4YElNSIZQ+S1J name=__EVENTVALIDATION>
</DIV>
<DIV>
<TABLE style="WIDTH: 1024px" cellSpacing=0 cellPadding=0 align=center>
<TBODY>
<TR>
<TD style="WIDTH: 1024px; HEIGHT: 150px">
<OBJECT
style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; VERTICAL-ALIGN: bottom; LINE-HEIGHT: 0px; PADDING-TOP: 0px"
codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0
height=150 width=1024 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="../主页头动画.swf"><PARAM NAME="quality" VALUE="high"><PARAM NAME="wmode" VALUE="transparent">

<embed src="../主页头动画.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplaer"
type="application/x-shockwave-flash" width="1024" height="150"></embed>
</OBJECT></TD></TR></TBODY></TABLE>
<TABLE class=style1 cellSpacing=0 cellPadding=0 align=center>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: center">请选择要上传的头像
<INPUT id=fileuploadPic style="WIDTH: 190px" type=file name=fileuploadPic>
 <INPUT id=btnOk type=submit value=开始上传 name=btnOk>  <SPAN
class=style2> 注意:</SPAN>图片长、宽比最好是1:1;图片大小不超过100K,否则无法上传</TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: center"><SPAN
id=lblInfor
style="FONT-WEIGHT: bold; FONT-SIZE: small; COLOR: red"></SPAN></TD></TR></TBODY></TABLE><BR><BR><BR><BR><BR>
<TABLE style="MARGIN-TOP: 15px" cellSpacing=0 cellPadding=0 width=1024
align=center>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: small; BORDER-LEFT-COLOR: #800000; BORDER-BOTTOM-COLOR: #800000; PADDING-BOTTOM: 5px; COLOR: #ffffff; PADDING-TOP: 5px; FONT-FAMILY: 宋体, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #008000; TEXT-ALIGN: center; BORDER-RIGHT-COLOR: #800000">哈哈啊哈哈哈</TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; COLOR: #666666; PADDING-TOP: 15px; FONT-FAMILY: 宋体, Arial, Helvetica, sans-serif; TEXT-ALIGN: center">本站版权属xxx所有<BR><BR>本站信息均由网友上传,若对您造成侵犯,请通知我们,我们立刻删除之。 
工作时间:7:00-23:00<BR><BR> 

<BR><BR></TD></TR></TBODY></TABLE></DIV></FORM></BODY></HTML>
孟子E章 2011-11-06
  • 打赏
  • 举报
回复
让你贴生成的html代码,就是看你传递的参数是否正确了,解决问题要一步一步地来,明白吗?
#blackheart 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 from_taiwan 的回复:]
你的上一个回复,好像是在.NET里进行转换吧,虽然还是乱码,但 是一种思路,我就是不知道用哪些函数进行转化
[/Quote]
是的,因为ASP.NET默认是按UTF-8解码的,所以用Request.Url.Query截取到原始的没有经过ASP.NET解码的参数,自己再去用指定的解码方式去解析。治标不治本的方法。

11楼说的对,看看你的连接生成后的HTML源码,

孟子E章 2011-11-06
  • 打赏
  • 举报
回复
让你贴生成的html代码就这么难吗?

你这个问题已经是第三个帖子了,

任何语言都需要Server.UrlEncode,Server.UrlEncode的作用就是对地址进行编码,以便正确传输参数,你传递直接中文,没有中文环境的浏览器怎么办?

地址编码和解码是Web开发基本的规则
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 net_lover 的回复:]
<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=Server.UrlEncode(uname) %>" target="_blank">click</a>
这样写,
然后查看你浏览器源代码这行生成的是什么内容才可以进一步找到解决办法。

贴出来html部分。
[/Quote]完整代码,就是我提问时写得那些,都有了

发送时,加上Server.UrlEncode也不行,这个函数的作用是什么?
我们平时都在用,但那是一种语言环境下,发送、接收都是vb或都是C#
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nianhui 的回复:]
1;服务其接收到的%e5%8f%aa%e8%ae%b8%e7%be%8e%e5%……是经过浏览器编码过得。编码方式是[IE对中文不做处理,FF用GB2312做处理](我只知道这两个),没处理的再UrlDecode也无影响,但是处理过的就不行了,ASP.NET默认是用utf-8来解码的,所以才会有乱码。

2,所以根本问题所在是你在做连接的时候就应该把你的中文参数用utf-8进行编码

<a……
[/Quote]在发送端怎么进行“utf8编码”呢,我在该页面上这句<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>,不能说明发出的参数是utf8编码格式吗?

你的上一个回复,好像是在.NET里进行转换吧,虽然还是乱码,但 是一种思路,我就是不知道用哪些函数进行转化
孟子E章 2011-11-06
  • 打赏
  • 举报
回复
<a href="http://127.0.0.1/commonceshi/1.aspx?p=<%=Server.UrlEncode(uname) %>" target="_blank">click</a>
这样写,
然后查看你浏览器源代码这行生成的是什么内容才可以进一步找到解决办法。

贴出来html部分。
#blackheart 2011-11-06
  • 打赏
  • 举报
回复

1;服务其接收到的%e5%8f%aa%e8%ae%b8%e7%be%8e%e5%……是经过浏览器编码过得。编码方式是[IE对中文不做处理,FF用GB2312做处理](我只知道这两个),没处理的再UrlDecode也无影响,但是处理过的就不行了,ASP.NET默认是用utf-8来解码的,所以才会有乱码。

2,所以根本问题所在是你在做连接的时候就应该把你的中文参数用utf-8进行编码

<a href="http://127.0.0.1/commonceshi/1.aspx?p=utf8编码('<%=uname %>')" target="_blank">click</a>
#blackheart 2011-11-06
  • 打赏
  • 举报
回复

NameValueCollection temp = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("gb2312"));

string username = temp["p"];

Response.Write(username);
秋的红果实 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]
那是胡乱试探,不是按照真实的机制来调试。

asp.net会自动地对url参数进行UrlDecode操作,其做法是:
1. 首先将%ddd这种类型标记的16进制字节序列转换为内部的byte[]。
2. 进行UTF8编码解码,结果写到.net的字符串中返回。

例如这样的url参数值:%e5%8f%aa%e8%ae%b8%e7%be%8e%e5%9b%bd%e9%b8%a1%e5%a5%……
[/Quote]是啊,大侠,要从根本上解决问题,可惜我不懂原理
我已学习你提供的知识,就是说:.NET接受到参数后,自动将其转化为UTF8码了,是这样吗?
还请教:
(1)按照我那种方式发送参数,在.NET没转化前是什么编码类型?
我在asp页面里已经设置成utf-8了,那么没转化前是不utf-8(?)
(2)C#里编码间互相转化的函数有哪些?
(3)既然.NET接收到url参数转为UTF8了,那么输出内容为什么是乱码,要什么编码格式才不是乱码?
  • 打赏
  • 举报
回复
要注意,UrlDecode(...)就是按照互联网的比较普遍的通讯规范——UTF8编码——来解析的,跟你的什么网页在本地的编码保存格式没有任何关系。改BUG要找到具体的内部机制才去改,不要乱试。
加载更多回复(6)
asp.net乱码解决方法 1、从IE地址栏中直接输入这个地址,访问没错;   2、做一个静态页,其中包括这个超链接,点击访问也没错;   3、就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码。   一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是"http://www.****.com/user.aspx?id=水天",但真正传递过去的参数"水天"其实已经经过类似于Server.UrlEncode的操作了,当然默认是utf-8编码,正是由于这个原因,如果对方系统不进行相应的解码,直接操作该参数,就产生了以上的错误。   解决方法:   网上有很多解决之道,最常见的莫过于以下几点:   1、在web.config里配制,这个方法确实可行,但我想很多人不想用这种方法来解决,把整个项目的请求和回应都定为gb2312,我觉得不是一个好办法,有点本末倒置了,毕竟这会导致很多其它问题的出现。   2、把要包含该链接的aspx文档,修改其charset属性为gb2312。这个方法到也可以接受,不过对于该文中的问题还不是最好的方法,因为该功能块是可以动态添加到任何页面的,难道要去修改所有的页面?想想还是不太合适。 单个页面解决方案 添加   3、直接用Server.UrlEncode和Server.Decode进行加码和解码操作,这种方法对于发送方和接收方都在一个项目中是可行的,现在的问题是,我们要随意去访问别人的系统,所以只能弃用此方法了。   4、采用HttpUtility.UrlEncode(query, System.Text.Encoding.GetEncoding("GB2312"));对链接中的参数值进行gb2312的编码,这种方法,对方不用进行任何解码操作,直接接收参数则不会出现乱码。   一般提到最多的也就上面4种方法,其它的也跟这些大同小异。仔细分析后,觉得还是第4种方法最适合解决当前问题,把中文参数进行如4中的操作。但又出现另外一个问题,由于这是一个用户可以自由输入链接地址的功能,所以首先要做的就是得先分析这些链接URL,解析出参数,再对这些参数进行4中操作,然后再合拼成原来的URL地址。   幸亏,URL参数解析C#已经有类库的支持,不用再去写那些复杂的正则表达式来匹配了。

111,076

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧