Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >宽字符编码和解码通用类[CodeWidthChartUtility]

宽字符编码和解码通用类[CodeWidthChartUtility]

作者头像
磊哥
发布于 2018-05-08 08:35:47
发布于 2018-05-08 08:35:47
72500
代码可运行
举报
文章被收录于专栏:王磊的博客王磊的博客
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-12-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#操作json的通用帮助类
using System; using System.Data; using System.Text; using System.Collections.Generic; using System.Reflection; using System.Data.Common; using System.Collections; using System.IO; using System.Text.RegularExpressions; using System.Runtime.Serialization.Jso
用户7108768
2021/11/02
1.3K0
C#用于对用户输入数据进行校验的类
这个C#类包含了各种常用数据验证的函数,包含验证是否是数字,校验email格式,区分中英文截取字符串,区分中英文计算字符串长度,检测是否包含中文字符,判断是否包含特定字符等
用户7108768
2021/11/02
2.1K0
代码生成器原理及示例
在三层架构中Model、DAL(Data Access Layer)、BLL层有必要分开,其中有些代码可以由代码生成器生成。虽然网络已经有成熟的代码生成器,但是第三方代码生成器在实际应用场景中,生成的代码经常还需要在其基础上修改。修改其代码就不如修改代码生成器本身。所以掌握代码生成器的编写方法、原理还是很有必要的。
全栈程序员站长
2022/07/25
9900
代码生成器原理及示例
MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Text; public
磊哥
2018/05/08
3.2K0
IniHelper——INI操作辅助类
使用INI配置文件,简单便捷。 该辅助工具类为C#操作INI文件的辅助类,源码在某位师傅的基础上完善的来,因为忘记最初的来源了,因此不能提及引用,在此深感遗憾,并对贡献者表示感谢。 1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 7 names
用户1637609
2018/04/12
1.4K0
C# 实现的Javascript加密算法
不打算公开的,不过转念一想,反正又没人看,就发出来吧。 这是使用C#来实现的JS加密的,被加密的JS文件,代码需要写的规范,不能少了分号(;)等js中可能会被忽略的符号。 下面是完整代码,自己看吧
徐大嘴
2019/03/21
1.1K0
.NET常用的扩展方法整理
using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; namespace IBO.XJMYQP.Utility { public static class Extens
跟着阿笨一起玩NET
2018/09/19
1.2K0
我的数据访问类(第二版)—— for .net2.0 (二)
下面写一下相对来说不变的地方 SQL语句部分,改成了静态函数的形式。 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common; using System.Data.SqlClient; using JYK; namespace JYK.DataAccessLibrary {     //DataAccessLibrary 数据访问库    
用户1174620
2018/02/07
1K0
通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
查看上篇文章通用数据级别权限的框架设计与实现(2)-数据权限的准备工作,我们开始数据列表的权限过滤. 原理:我们在做过滤列表时,根据用户权限自动注入到相关SQL中,实现相关过滤,如果拥有全部权限,则不生成相关SQL片段
星痕
2018/09/12
3K0
DataGrid连接Access的快速分页法——动态生成SQL语句
作者:黎波usingSystem;usingSystem.Text;namespacePagi
Java架构师必看
2020/09/30
8450
.net基本数据类型操作
摘要总结:本文主要介绍了.NET Core中DateTimeOffset类型的基本用法、以及如何在其他编程语言中使用DateTimeOffset。此外,还介绍了如何在.NET Core中处理时间、时区、夏令时等信息。
彭泽0902
2018/01/04
5250
数据结构C#版笔记--堆栈(Stack)
堆栈(Stack)最明显的特征就是“先进后出”,本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点。 相对前面学习过的顺序表、链表不同的地方在于:Sta
菩提树下的杨过
2018/01/23
1.4K0
数据结构C#版笔记--堆栈(Stack)
使用MONO在MAC OS上开发——同步日志(一)
  原先打算再写点EXT.NET方面的,由于现在在玩Silverlight和Android,所以不打算写下去了。而且最近很忙,所以发帖也不会很及时。
雪雁-心莱科技
2018/12/27
1.9K0
我的数据访问函数库的源代码(二)—— SQL语句部分
/* 2008 4 25 更新 */ 我的数据访问函数库的源码。整个类有1400行,原先就是分开来写的,现在更新后还是分开来发一下吧。 第二部分:SQL语句部分。 传入SQL语句,执行相关的操作。 //查询语句部分         #region 运行查询语句返回记录(DataSet、DataTable、DataRow、String[]、String)              /// <summary>         /// 运行SQL查询语句 返回DataSet。可以传入多条查询语句,返回
用户1174620
2018/02/07
1.4K0
发短信API
由于需要进行短信发送,选择了百度的API,现贡献一下源码。 /// <summary> /// 百度接口签名帮助类 /// </summary> public class BaiduApiHelper { #region 构造函数 /// <summary> /// 构造函数 /// </summary> /// <param name="accessKeyId">百度AccessKe
谭广健
2019/09/30
8.6K0
发短信API
Silverlight多重表头实现
效果: 实现主要逻辑:通过动态拼接XML生成表头样式,绑定到列上。 主要是动态拼接XML时要仔细核对对应的占位行,具体可以看代码,注释很详细 两个类一个接口 NTree<T>:定义表头树形结构 1
用户6362579
2019/09/29
1.1K0
Silverlight多重表头实现
Java 对字符串操作的工具类,很全
目录 1 实现 1 实现 import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.util.AntPathMatcher; import com.ruoy
一写代码就开心
2023/02/01
1.1K0
Java字符串工具类,对StringUtils重写,方便使用
String工具 主要对 StringUtils 的一些方法进行重写,达到更方便的使用
目的地-Destination
2023/03/06
6900
string字符串扩展
/// <summary> /// /// </summary> public static class StringExtentions { /// <summary> /// 转换为MD5加密后的字符串(默认加密为32位) /// </summary> /// <param name="str"></param> /// <returns></returns> public
跟着阿笨一起玩NET
2022/12/09
8920
Java实用工具类四:StringUtils工具类
此文仅对自己工作中用到的类进行总结,方便以后的使用。 package com.cn.hnust.util; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRe
芈亓
2022/06/17
7180
推荐阅读
相关推荐
C#操作json的通用帮助类
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验