byte[] dest = Encoding.Convert(Encoding.UTF8,Encoding.GetEncoding("GB2312"),Encoding.UTF8.GetBytes(yourUtf8String)); string result = Encoding.GetEncoding("GB2312").GetString(dest);
string name = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes(yourUtf8String));
protected void Page_Load(object sender, EventArgs e) { string title = "北-"; string utf = TransGB2312ToUTF8(title); Response.Write(string.Format("gb title : {0}", title)); Response.Write("<br />"); Response.Write(string.Format("utf title : {0}", utf)); Response.Write("<br />"); Response.Write(string.Format("trans title : {0}", Trans(utf))); Response.Write("<br />"); Response.Write(string.Format("trans first title : {0}", TransFirst(utf))); Response.Write("<br />"); Response.Write(string.Format("trans second title : {0}", TransSecond(utf))); Response.Write("<br />"); title = "北京"; utf = TransGB2312ToUTF8(title); Response.Write(string.Format("gb title : {0}", title)); Response.Write("<br />"); Response.Write(string.Format("utf title : {0}", utf)); Response.Write("<br />"); Response.Write(string.Format("trans title : {0}", Trans(utf))); Response.Write("<br />"); Response.Write(string.Format("trans first title : {0}", TransFirst(utf))); Response.Write("<br />"); Response.Write(string.Format("trans second title : {0}", TransSecond(utf))); Response.Write("<br />"); } /// <summary> /// GB2312转UTF8 /// </summary> /// <param name="input">源字符串</param> /// <returns></returns> public string TransGB2312ToUTF8(string input) { string reResult = string.Empty; Encoding gb = Encoding.GetEncoding("gb2312"); byte[] bt = Encoding.Convert(Encoding.Default, Encoding.UTF8, gb.GetBytes(input)); reResult = gb.GetString(bt); return reResult; } /// <summary> /// UTF8转GB2312 /// </summary> /// <param name="input">源字符串</param> /// <returns></returns> public string Trans(string input) { string res = input; UTF8Encoding utf = new UTF8Encoding(); byte[] bt = Encoding.Convert(Encoding.UTF8, Encoding.Default, utf.GetBytes(res)); res = utf.GetString(bt); return res; } /// <summary> /// UTF8转GB2312(方法一) /// </summary> /// <param name="input">源字符串</param> /// <returns></returns> public string TransFirst(string input) { string res = input; byte[] dest = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("GB2312"), Encoding.UTF8.GetBytes(res)); res = Encoding.GetEncoding("GB2312").GetString(dest); return res; } /// <summary> /// UTF8转GB2312(方法二) /// </summary> /// <param name="input">源字符串</param> /// <returns></returns> public string TransSecond(string input) { string res = input; res = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes(res)); return res; } 以上输出结果为: gb title : 北- utf title : 鍖? trans title : ?? trans first title : 鍖? trans second title : 閸? gb title : 北京 utf title : 鍖椾含 trans title : 北京 trans first title : 鍖椾含 trans second title : 閸栨ぞ鍚?当原字符串为偶数个中文时,用Trans方法可以还原回去 当原字符串为奇数个中文+字母|符号|数字,所有的方法都不能还原回去这是否在转码的过程当中丢失了数据?
string result = Encoding.GetEncoding("GB2312").GetString(dest);
protected void Page_Load(object sender, EventArgs e)
{
string title = "北-";
string utf = TransGB2312ToUTF8(title);
Response.Write(string.Format("gb title : {0}", title));
Response.Write("<br />");
Response.Write(string.Format("utf title : {0}", utf));
Response.Write("<br />");
Response.Write(string.Format("trans title : {0}", Trans(utf)));
Response.Write("<br />");
Response.Write(string.Format("trans first title : {0}", TransFirst(utf)));
Response.Write("<br />");
Response.Write(string.Format("trans second title : {0}", TransSecond(utf)));
Response.Write("<br />");
title = "北京";
utf = TransGB2312ToUTF8(title);
Response.Write(string.Format("gb title : {0}", title));
Response.Write("<br />");
Response.Write(string.Format("utf title : {0}", utf));
Response.Write("<br />");
Response.Write(string.Format("trans title : {0}", Trans(utf)));
Response.Write("<br />");
Response.Write(string.Format("trans first title : {0}", TransFirst(utf)));
Response.Write("<br />");
Response.Write(string.Format("trans second title : {0}", TransSecond(utf)));
Response.Write("<br />");
} /// <summary>
/// GB2312转UTF8
/// </summary>
/// <param name="input">源字符串</param>
/// <returns></returns>
public string TransGB2312ToUTF8(string input)
{
string reResult = string.Empty;
Encoding gb = Encoding.GetEncoding("gb2312");
byte[] bt = Encoding.Convert(Encoding.Default, Encoding.UTF8, gb.GetBytes(input));
reResult = gb.GetString(bt);
return reResult;
} /// <summary>
/// UTF8转GB2312
/// </summary>
/// <param name="input">源字符串</param>
/// <returns></returns>
public string Trans(string input)
{
string res = input;
UTF8Encoding utf = new UTF8Encoding();
byte[] bt = Encoding.Convert(Encoding.UTF8, Encoding.Default, utf.GetBytes(res));
res = utf.GetString(bt);
return res;
}
/// <summary>
/// UTF8转GB2312(方法一)
/// </summary>
/// <param name="input">源字符串</param>
/// <returns></returns>
public string TransFirst(string input)
{
string res = input;
byte[] dest = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("GB2312"), Encoding.UTF8.GetBytes(res));
res = Encoding.GetEncoding("GB2312").GetString(dest);
return res;
} /// <summary>
/// UTF8转GB2312(方法二)
/// </summary>
/// <param name="input">源字符串</param>
/// <returns></returns>
public string TransSecond(string input)
{
string res = input;
res = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes(res));
return res;
}
以上输出结果为:
gb title : 北-
utf title : 鍖?
trans title : ??
trans first title : 鍖?
trans second title : 閸?
gb title : 北京
utf title : 鍖椾含
trans title : 北京
trans first title : 鍖椾含
trans second title : 閸栨ぞ鍚?当原字符串为偶数个中文时,用Trans方法可以还原回去
当原字符串为奇数个中文+字母|符号|数字,所有的方法都不能还原回去这是否在转码的过程当中丢失了数据?
某些组合是不被UTF-16认可的,所以,不是任何的字节串都能用.net的字符串表示的。