C# 对JS编码/解码进行转换

 public static class Extension
    {
        #region [编码/解码统一转换]
        /// <summary>
        ///
        /// </summary>
        /// <param name="str"></param>
        /// <param name="isEscape">True为Encode;False为Decode</param>
        /// <returns></returns>
        public static string JSCodingString(this string str, bool isEscape = false)
        {
            if (isEscape)
                return Microsoft.JScript.GlobalObject.escape(str);
            else
                return Microsoft.JScript.GlobalObject.unescape(str);
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="lsto"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingEntityList<T>(this List<T> lsto, bool isEscape = false)
        {
            foreach (object o in lsto)
            {
                JSCodingEntity(o, isEscape);
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingEntity<T>(this T o, bool isEscape = false)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            if (isEscape)
                                p.SetValue(o, Microsoft.JScript.GlobalObject.escape(objValue.ToString()), null);
                            else
                                p.SetValue(o, Microsoft.JScript.GlobalObject.unescape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingTable(this DataSet o, bool isEscape = false)
        {
            foreach (DataTable t in o.Tables)
            {
                JSCodingEntity(t, isEscape);
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingTable(this DataTable o, bool isEscape = false)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        if (isEscape)
                            o.Rows[i][j] = Microsoft.JScript.GlobalObject.escape(o.Rows[i][j].ToString());
                        else
                            o.Rows[i][j] = Microsoft.JScript.GlobalObject.unescape(o.Rows[i][j].ToString());
                    }
                }
            }
        }
        #endregion

        #region [重构:将原有编码/解码采用独立的函数方式。]
        public static string ToJSEncodeString(this string str)
        {
            return Microsoft.JScript.GlobalObject.escape(str);
        }

        public static string ToJSDecodeString(this string str)
        {
            return Microsoft.JScript.GlobalObject.unescape(str);
        }

        public static void ToJSEncodeEntityList<T>(this List<T> lsto)
        {
            foreach (object o in lsto)
            {
                ToJSEncodeEntity(o);
            }
        }

        public static void ToJSDecodeEntityList<T>(this List<T> lsto)
        {
            foreach (object o in lsto)
            {
                ToJSDecodeEntity(o);
            }
        }

        public static void ToJSEncodeEntity<T>(this T o)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            p.SetValue(o, Microsoft.JScript.GlobalObject.escape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        public static void ToJSDecodeEntity<T>(this T o)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            p.SetValue(o, Microsoft.JScript.GlobalObject.unescape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        public static void ToJSEncodeTable(this DataSet o)
        {
            foreach (DataTable t in o.Tables)
            {
                ToJSEncodeTable(t);
            }
        }

        public static void ToJSDecodeTable(this DataSet o)
        {
            foreach (DataTable t in o.Tables)
            {
                ToJSDecodeTable(t);
            }
        }

        public static void ToJSEncodeTable(this DataTable o)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        o.Rows[i][j] = Microsoft.JScript.GlobalObject.escape(o.Rows[i][j].ToString());
                    }
                }
            }
        }

        public static void ToJSDecodeTable(this DataTable o)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        o.Rows[i][j] = Microsoft.JScript.GlobalObject.unescape(o.Rows[i][j].ToString());
                    }
                }
            }
        }

        #endregion
    }

  

时间: 2024-09-29 04:16:15

C# 对JS编码/解码进行转换的相关文章

Unicode编码解码在线转换工具

Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表. 2006年7月的最新版本的 Unicode 是5.0版本. 2005年3月31日推出的Unicode 4.1.0 .另外,5.0 Beta于2005年12月12日推出,5.2版本

node.js学习之base64编码解码_node.js

一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了.最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送.把不可打印的字符也能用可打印字符来表示,问题就解决了.Base64编码应运而生,Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法

JS与C#编码解码

 这篇文章主要是对JS与C#编码解码进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z   encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z   encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z   1.   JS: escape :    

escape() 字符串编码函数及其它js 编码函数

escape() 字符串编码函数及其它js 编码函数 escape(string) 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string)参数 描述 string 必需.要被转义或编码的字符串. 1:说明:所有空格.标点.重音符号以及其他非 ascii 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数.例如,空格返回的是 "%20" .字符值大于 255 的以 "%uxxxx&quo

PHP也能干大事之PHP中的编码解码详解

PHP也能干大事之PHP中的编码解码详解        这篇文章主要介绍了PHP也能干大事之PHP中的编码解码详解,本文讲解了ASCII编解码.URL编解码.Base64编解码.HTML实体编解码.二进制.八进制.十进制.十六进制相互转换等内容,需要的朋友可以参考下 写在前面 PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将<PHP也能干大事>丰富得更精彩!转载请注

Base64在线编码解码实现代码 演示与下载

在线演示地址:gb2312版本 http://tools.jb51.net/tools/base64_decode-gb2312.phputf8版本 http://tools.jb51.net/tools/base64_decode-utf8.php复制代码 代码如下:<?php header('Content-Type: text/html; charset=gb2312'); $txt1 = stripslashes(trim( @$_POST['text1'])); $button = @

java中文乱码解决之道(五)—–java是如何编码解码的

编码&解码 1:I/O操作 2:内存 3:数据库 4:javaWeb 下面主要介绍前面两种场景,数据库部分只要设置正确编码格式就不会有什么问题,javaWeb场景过多需要了解URL.get.POST的编码,servlet的解码,所以javaWeb场景下节LZ介绍. I/O操作 在前面LZ就提过乱码问题无非就是转码过程中编码格式的不统一产生的,比如编码时采用UTF-8,解码采用GBK,但最根本的原因是字符到字节或者字节到字符的转换出问题了,而这中情况的转换最主要的场景就是I/O操作的时候.当然I/

.NET编码解码(HtmlEncode与HtmlEncode)

原文:.NET编码解码(HtmlEncode与HtmlEncode) 编码代码: System.Web.HttpUtility.HtmlEncode("<a href=\"http://hovertree.com/\">何问起</a>"); 解码代码: System.Web.HttpUtility.HtmlDecode("<a href="http://hovertree.com/">何问起</

Java字符编码解码的实现详解_java

 字符集基础: Character set(字符集)          字符的集合,也就是,带有特殊语义的符号.字母"A"是一个字符."%"也是一个字符.没有内在数字价值,与 ASC II ,Unicode,甚至是电脑也没有任何的直接联系.在电脑产生前的很长一段时间内,符号就已经存在了. Coded character set(编码字符集)          一个数值赋给一个字符的集合.把代码赋值给字符,这样它们就可以用特定的字符编码集表达数字的结果.其他的编码字符