【www.gdgbn.com--脚本编码】

using system;
using system.text;

///


/// author:stone_w
/// date:2010.12.23
/// desc:宽字符编码和解码
///

public class codewidthchartutility
{
public codewidthchartutility() { }

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

#region 判断需要转换的字符
///


/// 判断需要转换的字符
///

/// 判断字符
/// bool
private static bool istowindthchart(char charvalue)
{
nonencodingchats = nonencodingchats.toupper() + nonencodingchats.tolower();
return nonencodingchats.indexof(charvalue) == -1;
}
#endregion

#region 宽字符编码
///


/// 宽字符编码
/// 1.编码后 有js控制 浏览器会自动解析[js无需解码]
/// 2.后台控制xxx.innerhtml=宽字符 会原样输出宽字符串[后台控制需要手动解析]
///

/// 需要编码的字符串
/// 编码后的宽字符串
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 宽字符解码
///


/// 宽字符解码
/// 1.后台才需要手动解码
/// 2.js 控制的浏览器会自动解码宽字符
///

/// 宽字符串
/// 一般能看懂的字符
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

}

 

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

本文来源:http://www.gdgbn.com/aspjiaocheng/28528/