jquery 编码解码


中文转Unicode:HttpUtility.UrlEncodeUnicode(string str);
转换后中文格式:"%uxxxx" 举例:"柳_abc123" 转换结果是:"%u67f3_abc123"

Unicode转中文1:HttpUtility.UrlDecode(string str);
str格式:"%uxxxx" ,举例:"%u67f3_abc123"

Unicode转中文2:Regex.Unescape(string str);
str格式:"\uxxxx" ,举例:"\u67f3_abc123"


参考资料:http://hi.baidu.com/eegcn/blog/item/7315f799a2e57f136f068c55.html

1.window.escape()与HttpUtility.UrlEncodeUnicode()编码格式一样:将一个汉字编码为%uxxxx格式
不会被window.escape编码的字符有:@ _ - . * / + 这与http://www.w3school.com.cn/js/jsref_escape.asp上的解释不符合

2.window.encodeURIComponent()与HttpUtility.UrlEncode()编码格式一样:将一个汉字编码为%xx%xx%xx的格式

不会被window.encodeURIComponent编码的字符有:‘()*-._!~ 这与http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp解释相符合

不会被HttpUtility.UrlEncode编码的字符有:‘()*-._!相比较而言,HttpUtility.UrlEncode比window.encodeURIComponent多一个 ~ 编码

3.不会被window.encodeURI编码的字符有:-_.!*();/?:@&=$,# 与encodeURIComponent对比,发现encodeURI不对:;/?:@&=+$,#这些用于分隔 URI 组件的标点符号进行编码

Asp.Net编码与JS编码的区别:

1. 不会被HttpUtility.UrlEncodeUnicode编码的字符与不会被HttpUtility.UrlEncode编码的字符一样,而escape和encodeURIComponent不编码的字符不一样

2.  HttpUtility.UrlEncode和HttpUtility.UrlEncodeUnicode会对/编码,而escape和encodeURIComponent会对/编码,encodeURI不会对/编码

3.  HttpUtility.UrlEncode()和HttpUtility.UrlEncodeUnicode()会把空格编码为 +,而escape,encodeURIComponent,encodeURI都会将空格编码为%20

使用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
  Accept-Encoding: gzip, deflate
  User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;  .NET CLR 2.0.50727; .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: 29
  Connection: Keep-Alive
  Pragma: no-cache

val={name:‘梅小伟‘,age:19}//发现这里没有经过编码,直接以2进制方式发送

在服务端index.aspx中打断点,发现Request.Form为:val=%7bname%3a‘%u6885%u5c0f%u4f1f‘%2cage%3a19%7d(这里使用了escape编码)使用Request.Form[0]取出的值和使用Request.Form["val"]取出的都为“{name:‘梅小伟‘,age:19}”

2.  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  var postStr=window.encodeURIComponent("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
  Accept-Encoding: gzip, deflate
  User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;  .NET CLR 2.0.50727; .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

val%3D%7Bname%3A‘%E6%A2%85%E5%B0%8F%E4%BC%9F‘%2Cage%3A19%7D//发现这里使用了window.encodeURIComponent加码

在服务端index.aspx中打断点,发现Request.Form为:val%3d%7bname%3a‘%u6885%u5c0f%u4f1f‘%2cage%3a19%7d(这里居然使用了escape编码,而不是encodeURIComponent编码),使用Request.Form[0]取出的值为“val={name:‘梅小伟‘,age:19}”,使用Request.Form["val"]取出的值为null(这是因为客户端发送请求时将=编码为%3d了,如果使用window.encodeURI这里就能取出Request.Form["val"]为:“{name:‘梅小伟‘,age:19}”了)

总结:不是使用get或者post,只要都是使用form的enctype属性的默认值application/x-www-form-urlencoded,所以如果你要传的值都会经过window.encodeURIComponent()编码再传送(除了值包含空格不会被编码为%20,而是编码为+).传到服务器后,可以用Server.UrlDecode()进行解码。但是要注意,不管是get方式还是post方式,enctype为application/x-www-form-urlencoded还是multipart/form-data,用asp.net在后台查看Request.QueryString和Request.Form的时候,中文又变成了escape编码格式,例如Request.Form=__VIEWSTATE=%2fwEPDwUJNzgzNDMwNTMzZGSvF5y%2bl0lztppRS7QNr4qmrF4KTw%3d%3d&mm=%u6556%u5fb7%u8428%u7684(英语字母不会被编码,而一些符号使用encodeURIComponent和escape编码后相同,如=,$等等)。

为什么优先使用encodeURIComponent而不是escape?
  escape方法并不编码字符+。而我们知道,在用户提交的表单字段中,如果有空格,则会被转化为+字符,而服务器解析的时候则会认为+号代表空格。由于这个缺陷,escape方法并不能正确地处理所有的非ASCII字符,你应当尽量避免使用escape方法,取而代之,你最好选择 encodeURIComponent()方法。

时间: 2024-08-15 01:59:29

jquery 编码解码的相关文章

[C语言]Base64编码解码

Base64编码解码 一,Base64编码原理 Base64编码的字符数组如下所示 : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 字符串转Base64编码:取3字节的字符串转换为四字节的字符串,依次往后转换.得到Base64编码字符串.具体原理如下: 1,如果需要编码的原串字节数刚好为3的倍数,那么转换规则如下: 以中文字符'严'为例,'严'字的UTF-8编码为:0xE4B8A5 = 11100100  10

服务器端获取表单数据的编码解码问题(servlet)

首先需要明确指出的是,这里的服务器是指tomcat. 在页面没有明确指定编码的情况下,客户端通过input标签和字符串向服务器传递两个值param1和param2.如果直接使用request.getParameter()方法来获取值的话,得到的肯定都是乱码,我们需要对其重新进行编码解码,就像下面的代码所示的那样: new String(req.getParameter("param1").getBytes("iso-8859-1"), "gbk"

百度移动版的url编码解码代码

1 var decode = function(m) { 2 try { 3 m = decodeURIComponent(m); 4 } catch(e) {} 5 var s = m.split("%"); 6 if (s.length > 1) { 7 s.shift(); 8 for(var i = 0; i < s.length; i++) { 9 var t = s[i]; 10 t = parseInt(t, 16); 11 t = t + 256; 12 t

Atitit.&#160;二进制数据ascii表示法,与base64编码解码api&#160;设计标准化总结java&#160;php&#160;c#.net

Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or  url unsafe2 1.2. 其他的二进制数据表示法  bin2hex() ,Quoted-printable ,UUencode2 2. Base64常用api2 2.1. ------------解码api2 2.2. decode(String s, OutputStream out)2 2.3. 

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台.国际化的推荐字符集肯定是UNICODE. 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节字符串进行支持. 但对很多较早的服务端项目,依然使用的是多字节字符集,不过使用多字节字符集依然可以实现跨

常见编码解码脚本

在平时我们会遇到各种各样的编码,在这里,我总结了一些常见的编码,并不是很全 尝试着做了个编码解码的汇总,并且写了个脚本出来,由于python功底不是很强,所以可能会有不到之处,还望各位多多指正 附上脚本: 1 #-*-coding:utf-8-*- 2 #author:hell0_w 3 #本人博客:http://hell0w.cnblogs.com/ 4 5 import base64 6 import bubblepy 7 import urllib 8 import quopri 9 im

网络编程 -- RPC实现原理 -- Netty -- 迭代版本V3 -- 编码解码

网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2--Netty -- pipeline.addLast(io.netty.handler.codec.MessageToMessageCodec<INBOUND_IN, OUTBOUND_IN>) 覆写编码解码方法. pipeline相当于拦截器.在pipeline中添加MessageToMessageCodec接口的实现类,该接口的实现类中的encode()方法自动将发送的Object对象转换为ByteBuf,decode()方法自动将

JavaEE细节问题03——关于服务器和浏览器的编码解码

Request--对于接受请求: 获取请求中的编码解码问题 : 对于post请求,浏览器会根据当前页面的编码来对字符进行编码, 所以我们 直接采用:  request.setCharacterEncoding("UTF-8"); 对于get请求,浏览器自动对字符进行iso-8859-1编码 所以我们拿到以后就要对其进行iso-8859-1解码,使其成为原本的字节数组,然后再进行utf-8编码          Enumeration<String> enums = requ

自定义协议的编码解码

2015.4.1 wqchen. 转载请注明出处 http://www.cnblogs.com/wqchen/p/4385798.html 本文介绍的是一个自定义协议的编码解码工具的实现. 游戏开发中,前端后端协议一般都会协商定制通信协议的格式,统一格式后用程序脚本对应前端和后端的编程语言,分别生成一份协议的编码和解码方案,便于协议的一致性. 这样的工具有很多,比较出名的是google的protobuf,它可以支持很多种编程语言.我也曾试用过protobuf,看过一点它的实现,protobuf完