C#实现JS脚本的escape()和unescape()
2013-03-21 14:34
323 查看
//在C#后台实现JavaScript的函数escape()的字符串转换 //些方法支持汉字 private string escape(string s) { StringBuilder sb = new StringBuilder(); byte[] byteArr = System.Text.Encoding.Unicode.GetBytes(s); for (int i = 0; i < byteArr.Length; i += 2) { sb.Append("%u"); sb.Append(byteArr[i + 1].ToString("X2"));//把字节转换为十六进制的字符串表现形式 sb.Append(byteArr[i].ToString("X2")); } return sb.ToString(); } //把JavaScript的escape()转换过去的字符串解释回来 //些方法支持汉字 private string unescape(string s) { string str = s.Remove(0, 2);//删除最前面两个"%u" string[] strArr = str.Split(new string[]{"%u"}, StringSplitOptions.None);//以子字符串"%u"分隔 byte[] byteArr = new byte[strArr.Length * 2]; for (int i = 0,j=0; i < strArr.Length;i++,j+=2) { byteArr[j + 1] = Convert.ToByte(strArr[i].Substring(0,2), 16); //把十六进制形式的字串符串转换为二进制字节 byteArr[j ] = Convert.ToByte(strArr[i].Substring(2, 2), 16); } str = System.Text.Encoding.Unicode.GetString(byteArr); //把字节转为unicode编码 return str; }
//在这顺便提一下String和StirngBuilder的区别
String 对象串联操作总是用现有字符串和新数据创建新的对象。StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。如果有足够的空间,新数据将被追加到缓冲区的末尾;否则,将分配一个新的、更大的缓冲区,原始缓冲区中的数据被复制到新的缓冲区,然后将新数据追加到新的缓冲区。
String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况
下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
//以下是不支持汉字的转换,摘自网络以作为参考。
public string Escape(string str) { if (str == null) return String.Empty; StringBuilder sb = new StringBuilder(); int len = str.Length; for (int i = 0; i != len; i++) { char c = str[i]; //everything other than the optionally escaped chars _must_ be escaped if (Char.IsLetterOrDigit(c) || c == '-' || c == '_' || c == '/' || c == '//' || c == '.') sb.Append(c); else sb.Append(Uri.HexEscape(c)); } return sb.ToString(); } public string UnEscape(string str) { if (str == null) return String.Empty; StringBuilder sb = new StringBuilder(); int len = str.Length; int i = 0; while (i != len) { if (Uri.IsHexEncoding(str, i)) sb.Append(Uri.HexUnescape(str, ref i)); else sb.Append(str[i++]); } return sb.ToString(); }
相关文章推荐
- C#实现JS脚本的escape()和unescape()
- c#中时间js的escape 和unescape
- Java式实现JS的Escape以及Unescape
- c# 实现javascript中的escape和unescape
- 用php实现js中escape和unescape
- PHP实现JS中escape与unescape的方法
- C#中转换JS的Escape()和Unescape()
- C#利用js脚本实现配置的文本表达式计算
- js,java实现escape()和unescape()函数解决以给方式提交中中文参数问题
- Java实现JS中的escape和UNescape代码分享
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
- Windows下WSH/JS实现SVN服务器钩子脚本阻止提交空日志信息和垃圾文件
- c#及js实现将金融变成3位一逗号
- js实现类似C# 时间格式化、时间运算
- js脚本调用C#程序
- JS脚本实现浏览器自动点击(阿里员工秒杀月饼)(转)
- js面向对象开发(四) 其他引用类型(encodeURI 、encodeURIComponent编码,eval方法 ,escape unescape 给汉字转码 )
- js 脚本实现 上移下移功能
- C# 微信跳一跳自动脚本实现,抛砖引玉!