zoukankan      html  css  js  c++  java
  • 宽字符编码和解码通用类[CodeWidthChartUtility]

      在做jsonp传递的时候遇到一个问题,当有特殊字符或中文的时候就会导致数据错误或者是乱码,刚开始有js的编码和解码和正则,都比较麻烦,现在找到了一种合适的解决方案,宽字符编码,js端会自动解析,能处理以上问题,以下是自己封装的通用类。

    代码
    using System;
    using System.Text;

    /// <summary>
    /// author:Stone_W
    /// date:2010.12.23
    /// desc:宽字符编码和解码
    /// </summary>
    public class CodeWidthChartUtility
    {
    public CodeWidthChartUtility() { }

    // 无需转码的字符
    private static string NonEncodingChats = "abcdefghijklmnopqrstuvwxyz0123456789`!@#$%^&*()_+|-=\\,./;'[]{}:<>?";

    #region 判断需要转换的字符
    /// <summary>
    /// 判断需要转换的字符
    /// </summary>
    /// <param name="charValue">判断字符</param>
    /// <returns>bool</returns>
    private static bool IsToWindthChart(char charValue)
    {
    NonEncodingChats
    = NonEncodingChats.ToUpper() + NonEncodingChats.ToLower();
    return NonEncodingChats.IndexOf(charValue) == -1;
    }
    #endregion

    #region 宽字符编码
    /// <summary>
    /// 宽字符编码
    /// 1.编码后 有js控制 浏览器会自动解析[js无需解码]
    /// 2.后台控制xxx.InnerHtml=宽字符 会原样输出宽字符串[后台控制需要手动解析]
    /// </summary>
    /// <param name="StrValue">需要编码的字符串</param>
    /// <returns>编码后的宽字符串</returns>
    public static string WidthChartEncoding(string StrValue)
    {
    StringBuilder sb
    = new StringBuilder();
    foreach (char item in StrValue)
    {
    if (IsToWindthChart(item)) // 判断需要转换的字符
    {
    sb.Append(String.Format(
    "\\u{0:x4}", (int)item));
    }
    else
    {
    sb.Append(item);
    }
    }
    return sb.ToString();
    }
    #endregion

    #region 宽字符解码
    /// <summary>
    /// 宽字符解码
    /// 1.后台才需要手动解码
    /// 2.js 控制的浏览器会自动解码宽字符
    /// </summary>
    /// <param name="WidthStr">宽字符串</param>
    /// <returns>一般能看懂的字符</returns>
    public static string WidthChartDecoding(string WidthStr)
    {
    StringBuilder sb
    = new StringBuilder();
    string[] _ValueList = WidthStr.Split(new char[] { '\\', 'u' }, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i != _ValueList.Length; i++)
    {
    char _ValueChar = Convert.ToChar(Convert.ToUInt16(_ValueList[i], 16));
    sb.Append(_ValueChar.ToString());
    }
    return sb.ToString();
    }
    #endregion

    }
    关注下面二维码,订阅更多精彩内容。
    微信打赏
    关注公众号(加好友):

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/vipstone/p/1914850.html
Copyright © 2011-2022 走看看