
/**//// <summary>
/// 将双字节字符转化成能更好的在网页和JS中使用的BigEndianUnicode
/// </summary>
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;
}
Helper methods#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
}
在JS文件中写入双字节字符可能引发编码错误,如DateChooser控件就出现过此类问题。较安全的解决办法是将中文字符串转换成类似“\\u5c0f\\u5bd2”的形式。文中给出了实现双字节字符和Big endian Unicode相互转换的代码。
1801

被折叠的 条评论
为什么被折叠?



