JS双字节字符处理实例

 

JS文件中直接写入一些双字节字符,有时会引发javascript编码错误,在DateChooser控件中就出现过这样的问题,现在一般的较安全的解决方法是把中文字符串转换成类似于"/u5c0f/u5bd2"这样的形式写到JS文件中,下面的代码就是实现双字节的字符和Big endian Unicode之间的相互转换。

 

    /**////

    /// 将双字节字符转化成能更好的在网页和JS中使用的BigEndianUnicode

    ///

    public abstract class Class2

    {

 

        public static void Main()

        {

            string test = "12,农民農民";

            string entext = EncodingBigEndianUnicode(test);

            WL(test);

            WL(entext);

            WL(DecodingBigEndianUnicode(entext));

            RL();

        }

        public static string DecodingBigEndianUnicode(string encodedString)

        {

            System.Text.RegularExpressions.Regex regUnicode = new System.Text.RegularExpressions.Regex(@"//u(?<1>[a-zA-Z0-9]{2})(?<2>[a-zA-Z0-9]{2})");

            System.Text.RegularExpressions.MatchCollection mc = regUnicode.Matches(encodedString);

            string s = string.Empty;

            foreach(System.Text.RegularExpressions.Match m in mc)

            {

                byte b1 = byte.Parse(m.Groups[1].Value,System.Globalization.NumberStyles.HexNumber);

                byte b2 = byte.Parse(m.Groups[2].Value,System.Globalization.NumberStyles.HexNumber);

                s += System.Text.Encoding.BigEndianUnicode.GetString(new byte[]{b1,b2});

            }

            return s;

        }

       

        public static string EncodingBigEndianUnicode(string text)

        {

            string s = string.Empty;

            for(int i = 0 ; i < text.Length ; i ++)

            {

                string s1 = text.Substring(i,1);

                byte[] bs = System.Text.Encoding.BigEndianUnicode.GetBytes(s1);

                s1 = @"/u";

                foreach(byte b in bs)

                {

                    string s2 = b.ToString("x");

                    if(s2.Length == 1)

                        s2 = "0" + s2;

                    s1 += s2;

                }

                s += s1;

            }

            return s;

        }

        #region Helper methods

 

        private static void WL(object text, params object[] args)

        {

            Console.WriteLine(text.ToString(), args);   

        }

   

        private static string RL()

        {

            return Console.ReadLine();   

        }

   

        private static void Break()

        {

            System.Diagnostics.Debugger.Break();

        }

 

        #endregion

    }

 

 

 

 

    以上为资料片段,通用性较好!

 

    下面我们可以谈下我们在开发单项目时解决编码问题的办法:

     1:当前我们项目中加一个JS文件,项目的编码格式为UTF-8 JS文件的编码格式为GB2312或者其它类型

    当前JS文件中关键函数存在双字节字符?

    解决方法1 直接将JS文件打开,另存为UTF-8编码格式。

    解决方法2 ,即在引用这个JS文件的时候将其编码转换成UTF-8

 

你可能感兴趣的:(技术生活)