Request不能取得正确的中文参数的问题。

本文介绍了ASP.NET中处理中文参数的几种方法,包括修改web.config文件配置、使用Server.UrlEncode和Server.UrlDecode进行编码解码,以及利用JavaScript的escape和unescape函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.NET中Request取不到正确的中文参数问题,例如:从dropdownlist中取值,中文的取来的值不正确,这是为什么?怎么解决??


Server.UrlEncode(dropdownlist1.SelectedItem.Text)

在web.config文件里加上以下代码:

http://schemas.microsoft.com/.NetConfiguration/v2.0">
   
      
      
  
 
 


传递页面
Response.Redirect("WebForm2.aspx?A=" + Server.UrlEncode("W Z C"));

接收页面
string s = Server.UrlDecode(Request["A"].ToString());

可以在web.config中修改这行,支持中文
            requestEncoding="gb2312"
            responseEncoding="gb2312"
/>


编码解码的问题,如果你的用户全用简体中文,
在你Web.config里设置编码解码字符集为GB2312
 requestEncoding="GB2312"
 responseEncoding="GB2312"

标头的
也改为


----

url传递中文的解决方案
1.设置web.config文件。(我不喜欢设置成这样)

......

......

2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
string Name = "中文参数";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));
>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

3.如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递

function GoUrl()
{
var Name = "中文参数";
location.href = "B.aspx?Name="+escape(Name);
}


>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

一般来说。设置web.config文件就可以了。但是如果你用 JavaScript 调用 webservice 方法的话(往webservice里面传递中文参数)。设置 web.config 文件好象无效。

 

在ASP.NET中Request取不到正确的中文参数问题解决办法[base64编码/解码]
最早想找这篇文章的原因是参数加在URL后的中文在ASP.NET里没有办法取到,所以想改成Base64编码试一下。但还是没有成功,今天早上经鸟食轩的提醒倒是找到了解决方法。主要是用escape的问题,下面有两段帮助里面写的比较清楚,我试了一下确实可以了。不知道为什么下面的这段代码当参数aa传三个中文汉字的时候就只能显示两个,传4个汉字的时候倒可以全部显示,真是有点奇怪,如果换成ASP就很正常了。不过有一个解决办法就是加了encodeURI("testUrl.aspx?aa=测试内");就完全正常了。

 




void Page_Load(Object sender, EventArgs EvArgs)
{
    //新增记录时传递的参数
    //if(!this.IsPostBack)
    this.Response.Write(Request["aa"]);

}  










function test()
{
    alert("");
    //location=encodeURI("testUrl.aspx?aa=测试内");
    location="testUrl.aspx?aa=测试内";
}
//-->



Encodes String objects so they can be read on all computers.

escape(charString)
The required charString argument is any String object or literal to be encoded.

Remarks
The escape method returns a string value (in Unicode format) that contains the contents of charstring. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as "%20."

Characters with a value greater than 255 are stored using the %uxxxx format.

Note   The escape method should not be used to encode Uniform Resource Identifiers (URI). Use encodeURI and encodeURIComponent methods instead.

Encodes a text string as a valid Uniform Resource Identifier (URI)

encodeURI(URIString)
The required URIString argument is a value representing an encoded URI.

Remarks
The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned. The encodeURI method does not encode the following characters: ":", "/", ";", and "?". Use encodeURIComponent to encode these characters.


解决了对中文的不支持问题.
先用escape()对中文进行编码.然后再进行base64编码.
解码时,再加入unescape()对中文进行解码.

  1
  2  
  3     
  4  
  5
  6     7
  8   var keyStr = "ABCDEFGHIJKLMNOP" +
  9                "QRSTUVWXYZabcdef" +
 10                "ghijklmnopqrstuv" +
 11                "wxyz0123456789+/" +
 12                "=";
 13
 14   function encode64(input) {
 15      input = escape(input);
 16      var output = "";
 17      var chr1, chr2, chr3 = "";
 18      var enc1, enc2, enc3, enc4 = "";
 19      var i = 0;
 20
 21      do {
 22         chr1 = input.charCodeAt(i++);
 23         chr2 = input.charCodeAt(i++);
 24         chr3 = input.charCodeAt(i++);
 25
 26         enc1 = chr1 >> 2;
 27         enc2 = ((chr1 & 3) > 4);
 28         enc3 = ((chr2 & 15) > 6);
 29         enc4 = chr3 & 63;
 30
 31         if (isNaN(chr2)) {
 32            enc3 = enc4 = 64;
 33         } else if (isNaN(chr3)) {
 34            enc4 = 64;
 35         }
 36
 37         output = output +
 38            keyStr.charAt(enc1) +
 39            keyStr.charAt(enc2) +
 40            keyStr.charAt(enc3) +
 41            keyStr.charAt(enc4);
 42         chr1 = chr2 = chr3 = "";
 43         enc1 = enc2 = enc3 = enc4 = "";
 44      } while (i  45
 46      return output;
 47   }
 48
 49   function decode64(input) {
 50      var output = "";
 51      var chr1, chr2, chr3 = "";
 52      var enc1, enc2, enc3, enc4 = "";
 53      var i = 0;
 54
 55      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
 56      var base64test = /[^A-Za-z0-9/+///=]/g;
 57      if (base64test.exec(input)) {
 58         alert("There were invalid base64 characters in the input text./n" +
 59               "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='/n" +
 60               "Expect errors in decoding.");
 61      }
 62      input = input.replace(/[^A-Za-z0-9/+///=]/g, "");
 63
 64      do {
 65         enc1 = keyStr.indexOf(input.charAt(i++));
 66         enc2 = keyStr.indexOf(input.charAt(i++));
 67         enc3 = keyStr.indexOf(input.charAt(i++));
 68         enc4 = keyStr.indexOf(input.charAt(i++));
 69
 70         chr1 = (enc1 > 4);
 71         chr2 = ((enc2 & 15) > 2);
 72         chr3 = ((enc3 & 3)  73
 74         output = output + String.fromCharCode(chr1);
 75
 76         if (enc3 != 64) {
 77            output = output + String.fromCharCode(chr2);
 78         }
 79         if (enc4 != 64) {
 80            output = output + String.fromCharCode(chr3);
 81         }
 82
 83         chr1 = chr2 = chr3 = "";
 84         enc1 = enc2 = enc3 = enc4 = "";
 85
 86      } while (i  87
 88      return unescape(output);
 89   }
 90
 91   //-->
 92
 93  
 94
 95     
 96
 97         Type in the message you want to encode in base64, or paste

 98         base64 encoded text into the text field, select Encode or Decode,

 99         and click the button!

100
101        

102
103         104            onClick="document.base64Form.theText.value=encode64(document.base64Form.theText.value);">
105         106            onClick="document.base64Form.theText.value=decode64(document.base64Form.theText.value);">
107
108     
109
110  
111
112


http://liubiqu.cnblogs.com/archive/2005/05/24/161506.html

 

 

传递中文的解决方案总结


From: csdn culturenet
1.设置web.config文件。
<system.web>
......
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
......
</system.web>
 
或者:
aspx文件中:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
string Name = "中文参数";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));

>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));
或者:
 
NavigateURL='<%# "WebForm2.aspx?Singer=" + HttpUtility.UrlEncode("中国人", System.Text.Encoding.GetEncoding("GB2312")) %>'


3.如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
<script language="JavaScript">
function GoUrl()
{
var Name = "中文参数";
location.href = "B.aspx?Name="+escape(Name);
}
</script>
<body onclick="GoUrl()">
>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

一般来说。设置web.config文件就可以了。但是如果你用 JavaScript 调用 webservice 方法的话(往webservice里面传递中文参数)。设置 web.config 文件好象无效。

————————————————————
在html中实现编解码:

<script language="javascript">
function openUrl(src)
{
  var strUrl=escape(src);
  window.open(strUrl);
}
 

function change_url(src)
{
 document.location.href=escape(src);
}
 
</script> 
 
在新窗口保存
<a href='BLOCKED SCRIPTopenUrl("css/合同.doc");' >交合同</a>
 
 
当前位置保存,无闪烁。
<a href="#" onclick=BLOCKED SCRIPTchange_url("css/合同.doc")>合同</a>
 
注意:路径中的斜线是:“/”,而不是“/”,否则也不行啊。
 
 
 
 
----------------------------------------
前一阵遇到在做.net Web开发时,碰到一个很奇怪的问题,就是Url中,如果将中文字符作为参数值传递时,QueryString得到的值可能会出错。简单的说,比如下面这个Url:
UrlParmTest.aspx?parm1=中国&parm2=中国人
在Request.QueryString时,parm1和parm2得到都是"中国",显然出现了问题,可是在某些情况下却是正常的。

如果请求不是直接通过url,而使用response.redirect在服务器端操作,没有遇到过类似的问题。

当时我想中文是双字节编码,可能传递的时候就是有不确定性,还是用英文好。

可是为什么在server端redirect就是正常的,问题在哪里呢?

昨天我询问在gtec的同学,才大概明白了一些:
如果在.cs文件中设置中文参数,请在中文参数外使用Server.UrlEncode("中文")对中文进行Encode
如果在.aspx文件中设置,请使用<%=Server.UrlEncode("中文")%>进行Encode
在QueryString时,不用再进行Decode,可以获得正常的中文字符串

下面是同学给出的一些解释:
UrlEncode把一些多字节字符转换成url里允许的单字节字符,本来浏览器就会自动做的,但是目前确实存在一些问题,所以自己再Encode一下,在接受端会自动对Url进行Decode。

我想Response.Redirect可能可以确保作Encode的工作,所以没有问题。

Add by : Huobazi

 
### JavaWeb 项目中解决接收不到前端传递参数的方法 #### 获取请求参数的方式 在Java Web开发中,`HttpServletRequest` 对象用于表示客户端发送给服务器的HTTP请求。所有来自浏览器的数据都会被封装在这个对象里[^4]。 对于表单提交的传统方式,可以利用 `request.getParameter()` 方法来取得指定名称的参数值。例如: ```java String password = request.getParameter("user_password"); ``` 当涉及到JSON格式的数据交互时,则需采用不同的策略。如果是在控制器(Controller)层接收到的是整个实体类形式或者是复杂的JSON字符串而非简单的键值对,那么应该考虑使用框架提供的注解如Spring MVC里的`@RequestBody` 来绑定入参[^2]。 #### 处理GET 请求中的中文乱码问题 针对 GET 方式的请求可能出现的中文字符显示异常的情况,可以通过转换字符集的方式来修正这个问题。具体做法是读取原始字节流并按照正确的编码重新解析成字符串: ```java // 解决 get 提交方式下的中文乱码 if ("GET".equalsIgnoreCase(request.getMethod())) { try { String paramValue = request.getParameter("paramName"); // 原始获取到的可能有乱码的参数 if (paramValue != null && !"".equals(paramValue.trim())) { paramValue = new String(paramValue.getBytes("ISO8859-1"), "UTF-8"); } } catch (UnsupportedEncodingException e) { logger.error(e.getMessage(), e); } } ``` #### AJAX 数据交互注意事项 对于通过AJAX方式进行异步通信的应用场景下遇到无法正常返回数据的问题,可能是由于响应的内容类型设置不当造成的。确保服务端设置了合适的Content-Type头信息,并且返回的结果结构符合预期。另外需要注意的是,在JavaScript端处理 JSON 格式的数据时不建议直接使用 eval 函数,因为这可能会带来安全风险;而是应当借助于原生支持或是第三方库来进行解析操作[^3]。 #### 调试技巧 为了更好地排查此类问题,可以在网络调试工具(比如Chrome开发者工具Network面板)观察实际发出/收到的消息体及其状态码等细节,同时也可以开启日志记录机制以便追踪内部逻辑执行流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值