中文转Unicode:HttpUtility.UrlEncodeUnicode(string str);html
转换后中文格式:"%uxxxx"
举例:"柳_abc123" java转换结果是:"%u67f3_abc123" Unicode转中文1:HttpUtility.UrlDecode(string str);jquery
str格式:"%uxxxx"
,举例:"%u67f3_abc123" 程序员str格式:"\uxxxx"Unicode转中文2:Regex.(string str);ajax
,举例:"\u67f3_abc123"
1.window.escape()与HttpUtility.UrlEncodeUnicode()编码格式同样:将一个汉字编码为%uxxxx格式服务器
不会被window.escape编码的字符有:@ _ - . * / +
这与http://www.w3school.com.cn/js/jsref_escape.asp上的解释不符合 app不会被window.encodeURIComponent编码的字符有:'()*-._!~ 这与 http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp2.window.encodeURIComponent()与HttpUtility.UrlEncode()编码格式同样:将一个汉字编码为%xx%xx%xx的格式asp.net
解释相符合jsp
不会被HttpUtility.UrlEncode编码的字符有:'()*-._!相比较而言,HttpUtility.UrlEncode比window.encodeURIComponent多一个 ~ 编码 ide
3.不会被window.encodeURI编码的字符有:-_.!*();/?:@&=$,# 与encodeURIComponent对比,发现encodeURI不对:;/?:@&=+$,#这些用于分隔 URI 组件的标点符号进行编码
1. 不会被HttpUtility.UrlEncodeUnicode编码的字符与不会被HttpUtility.UrlEncode编码的字符同样,而escape和encodeURIComponentAsp.Net编码与JS编码的区别:
不编码的字符不同
2. HttpUtility.UrlEncode和HttpUtility.UrlEncodeUnicode会对/编码,而escape和encodeURIComponent会对/编码,encodeURI不会对/编码
3. HttpUtility.UrlEncode()和HttpUtility.UrlEncodeUnicode()会把空格编码为 +,而escape,encodeURIComponent,encodeURI都会将空格编码为
使用ajax提交一个字符串:
1. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var postStr="val={name:'梅小伟',age:19}";
xmlHttp.send(postStr); 客户端发送请求以下:
POST /index.aspx HTTP/1.1
Accept: **
Accept-Language: zh-cn
Referer: http://localhost.:3910/Default.aspx
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727;Accept-Encoding: gzip, deflate
.NET CLR 3.0.04506.648;.NET CLR 3.5.21022; CIBA; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; baiduie8)
Host: localhost.:3910
Content-Length: 59
Connection: Keep-Alive
Pragma: no-cache
在服务端index.aspx中打断点,发现Request.Form为:val={name:'%u6885%u5c0f%u4f1f',age:19}(这里竟然使用了escape编码,val={name:'梅小伟',age:19}//发现这里使用了window.encodeURIComponent加码
而不是encodeURIComponent编码),使用Request.Form[0]取出的值为“val={name:'梅小伟',age:19}”,使用Request.Form["val"]
取出的值为null(这是由于客户端发送请求时将=编码为=了,若是使用window.encodeURI这里就能取出Request.Form["val"]为:“{name:'梅小伟',age:19}”了)
总结:不是使用get或者post,只要都是使用form的enctype属性的默认值application/x-www-form-urlencoded,因此若是你要传
的值都会通过window.encodeURIComponent()编码再传送(除了值包含空格不会被编码为 ,而是编码为+).传到服务器后,能够
用Server.UrlDecode()进行解码。可是要注意,不论是get方式仍是post方式,enctype为application/x-www-form-urlencoded还
是multipart/form-data,用asp.net在后台查看Request.QueryString和Request.Form的时候,中文又变成了escape编码格式,例
如Request.Form=__VIEWSTATE=/wEPDwUJNzgzNDMwNTMzZGSvFy+l0lztppRS7QNr4qmrF4KTw==&mm=%u6556%u5fb7%u8428%u7684(英语字母不会被编码,而一些符号使用encodeURIComponent和escape编码后相同,如=,$等等)。
escape方 法并不编码字符+。而咱们知道,在用户提交的表单字段中,若是有空格,则会被转化为+字符,而服务器解析的时候则为何优先使用encodeURIComponent而不是escape?
会认为+号表明空格。因为这个缺 陷,escape方法并不能正确地处理全部的非ASCII字符,你应当尽可能避免使用escape方法,取而
代之,你最好选择 encodeURIComponent()方法。
一、将jquery.js文件中的encodeURIComponent替换为encodeURI。便可解决中文乱码。二、另外一种方式将全部jsp、xml的字符集都设置为UTF-8 。
JSP <%@ page language="java" contentType="text/html; charset=UTF-8"%>XML <?xml version="1.0" encoding="UTF-8"?>。
beforeSend: function(xhr) { xhr.setRequestHeader("x-charset", "utf-8"); },膜拜啊!但是,服务端代码怎么写出来的? HttpModule是什么?HttpApplication、HttpWorkerRequest又是什么?这个类放到哪?怎么调用?对于仍是菜鸟的我来讲头好大啊!!
在一次次的尝试并未解决问题后,我接了杯水,捋了捋烦躁的心情,将眼睛从新放到服务器接到的那几个中文乱码上,陷入迷游:原本是GB2312编码的、好好的中文汉字!被这个奇葩的serialize()按着UTF8编码,又被网站默认的GB2312解码,最终给了我一个魑魅魍魉通常的鬼汉字!艹!!
等等!这就是个人答案!在服务器上接收页面传参的部分对参数进行以下处理:
queryStr=context.Request["queryname"]; queryStr = HttpUtility.UrlDecode(HttpUtility.UrlEncode(queryStr, Encoding.GetEncoding("gb2312")), Encoding.UTF8);很抱歉,我用了两行代码。