private string NormalU2C(string input)
{
string str = "";
char[] chArray = input.ToCharArray();
Encoding bigEndianUnicode = Encoding.BigEndianUnicode;
for (int i = 0; i < chArray.Length; i++)
{
char ch = chArray[i];
if (ch.Equals('\\'))
{
i++;
i++;
char[] chArray2 = new char[4];
int index = 0;
index = 0;
while ((index < 4) && (i < chArray.Length))
{
chArray2[index] = chArray[i];
index++;
i++;
}
if (index == 4)
{
try
{
str = str + this.UnicodeCode2Str(chArray2);
}
catch (Exception)
{
str = str + @"\u";
for (int j = 0; j < index; j++)
{
str = str + chArray2[j];
}
}
i--;
}
else
{
str = str + @"\u";
for (int k = 0; k < index; k++)
{
str = str + chArray2[k];
}
}
}
else
{
str = str + ch.ToString();
}
}
return str;
}
private string UnicodeCode2Str(char[] u4)
{
if (u4.Length < 4)
{
throw new Exception("It's not a unicode code array");
}
string str = "0123456789ABCDEF";
char ch = char.ToUpper(u4[0]);
char ch2 = char.ToUpper(u4[1]);
char ch3 = char.ToUpper(u4[2]);
char ch4 = char.ToUpper(u4[3]);
int index = str.IndexOf(ch);
int num2 = str.IndexOf(ch2);
int num3 = str.IndexOf(ch3);
int num4 = str.IndexOf(ch4);
if (((index == -1) || (num2 == -1)) || ((num3 == -1) || (num4 == -1)))
{
throw new Exception("It's not a unicode code array");
}
byte num5 = (byte)(((index * 0x10) + num2) & 0xff);
byte num6 = (byte)(((num3 * 0x10) + num4) & 0xff);
byte[] bytes = new byte[] { num5, num6 };
return Encoding.BigEndianUnicode.GetString(bytes);
}
{
string str = "";
char[] chArray = input.ToCharArray();
Encoding bigEndianUnicode = Encoding.BigEndianUnicode;
for (int i = 0; i < chArray.Length; i++)
{
char ch = chArray[i];
if (ch.Equals('\\'))
{
i++;
i++;
char[] chArray2 = new char[4];
int index = 0;
index = 0;
while ((index < 4) && (i < chArray.Length))
{
chArray2[index] = chArray[i];
index++;
i++;
}
if (index == 4)
{
try
{
str = str + this.UnicodeCode2Str(chArray2);
}
catch (Exception)
{
str = str + @"\u";
for (int j = 0; j < index; j++)
{
str = str + chArray2[j];
}
}
i--;
}
else
{
str = str + @"\u";
for (int k = 0; k < index; k++)
{
str = str + chArray2[k];
}
}
}
else
{
str = str + ch.ToString();
}
}
return str;
}
private string UnicodeCode2Str(char[] u4)
{
if (u4.Length < 4)
{
throw new Exception("It's not a unicode code array");
}
string str = "0123456789ABCDEF";
char ch = char.ToUpper(u4[0]);
char ch2 = char.ToUpper(u4[1]);
char ch3 = char.ToUpper(u4[2]);
char ch4 = char.ToUpper(u4[3]);
int index = str.IndexOf(ch);
int num2 = str.IndexOf(ch2);
int num3 = str.IndexOf(ch3);
int num4 = str.IndexOf(ch4);
if (((index == -1) || (num2 == -1)) || ((num3 == -1) || (num4 == -1)))
{
throw new Exception("It's not a unicode code array");
}
byte num5 = (byte)(((index * 0x10) + num2) & 0xff);
byte num6 = (byte)(((num3 * 0x10) + num4) & 0xff);
byte[] bytes = new byte[] { num5, num6 };
return Encoding.BigEndianUnicode.GetString(bytes);
}
写到这里问题基本上解决了,可是如果您的页面上有n多的input ,你还用这个工具一个input,一个input,把其中的Value Copy –Convert-Parse,到你的页面上吗?其实我们可以写一个正则表达式,用正则表达式来找出input中的Value,然后编码之后,在把原先的Value替换成编码后的Value,这样的话,即省了功夫,又不会出错(除非你的正则有问题),如果你不清楚怎么写的话,见一下代码:
protected void Button1_Click(object sender, EventArgs e)
{
string strPatter = @"(<input\s*[^>]*value\s*=\s*"")([^""]*)("".*?/>)";
//txtcontent为需要替换的
//txtresult为结果
Regex rgx = new Regex(strPatter, RegexOptions.Multiline);
this.txtresult.Text = rgx.Replace(txtcontent.Text, new MatchEvaluator(Encode));
}
//调用委托
private string Encode(Match m)
{
string strValue1 = m.Groups[1].Value;
string strValue2 = m.Groups[2].Value;
string strValue3 = m.Groups[3].Value;
return strValue1 + EncodeUniCode(strValue2) + strValue3;
}
//对中文编码成Unicode
private string EncodeUniCode(string input)
{
Encoding bigEndianUnicode = Encoding.BigEndianUnicode;
char[] chArray = input.ToCharArray();
string str = "";
foreach (char ch in chArray)
{
if (ch.Equals('\r') || ch.Equals('\n'))
{
str = str + ch;
}
else
{
byte[] bytes = bigEndianUnicode.GetBytes(new char[] { ch });
str = (str + @"\u") + string.Format("{0:X2}", bytes[0]) + string.Format("{0:X2}", bytes[1]);
}
}
return str;
}
{
string strPatter = @"(<input\s*[^>]*value\s*=\s*"")([^""]*)("".*?/>)";
//txtcontent为需要替换的
//txtresult为结果
Regex rgx = new Regex(strPatter, RegexOptions.Multiline);
this.txtresult.Text = rgx.Replace(txtcontent.Text, new MatchEvaluator(Encode));
}
//调用委托
private string Encode(Match m)
{
string strValue1 = m.Groups[1].Value;
string strValue2 = m.Groups[2].Value;
string strValue3 = m.Groups[3].Value;
return strValue1 + EncodeUniCode(strValue2) + strValue3;
}
//对中文编码成Unicode
private string EncodeUniCode(string input)
{
Encoding bigEndianUnicode = Encoding.BigEndianUnicode;
char[] chArray = input.ToCharArray();
string str = "";
foreach (char ch in chArray)
{
if (ch.Equals('\r') || ch.Equals('\n'))
{
str = str + ch;
}
else
{
byte[] bytes = bigEndianUnicode.GetBytes(new char[] { ch });
str = (str + @"\u") + string.Format("{0:X2}", bytes[0]) + string.Format("{0:X2}", bytes[1]);
}
}
return str;
}
编码工具下载