此文章分别转载自C#字符串转换为Acsii码,Ascii转化为字符串和ASP.NET 或C# 中ASCII码含中文字符的编解码处理
/// <summary>
/// C# 字符转ASCII码
/// </summary>
/// <param name="character"></param>
/// <returns></returns>
public static int Asc(string character)
{
if (character.Length == 1)
{
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];
return (intAsciiCode);
}
else
{
throw new Exception("Character is not valid.");
}
}
/// <summary>
/// C# ASCII码转字符
/// </summary>
/// <param name="asciiCode"></param>
/// <returns></returns>
public static string Chr(int asciiCode)
{
if (asciiCode >= 0 && asciiCode <= 255)
{
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
byte[] byteArray = new byte[] { (byte)asciiCode };
string strCharacter = asciiEncoding.GetString(byteArray);
return (strCharacter);
}
else
{
throw new Exception("ASCII Code is not valid.");
}
}
测试:
static void Main(string[] args)
{
string testStr = "我爱China!";
Console.WriteLine(testStr);
string[] testString = new string[testStr.Length];
for (int i = 0; i< testStr.Length; i++)
{
testString[i] = testStr.ElementAt(i).ToString();
}
StringBuilder stringBuilder = new StringBuilder();
foreach (var str in testString)
{
stringBuilder.Append(Chr(Asc(str)));
}
Console.WriteLine("------------");
Console.WriteLine(stringBuilder.ToString());
Console.ReadLine();
}
结果:
我爱China!
------------
??China!
说明以上的字符串和ASCII码互转不支持中文字符,使用下面的方法可以进行包含中文字符串的相互转换
/// <summary>
/// 含中文字符串转ASCII
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Str2ASCII(String str)
{
try
{
//这里我们将采用2字节一个汉字的方法来取出汉字的16进制码
byte[] textbuf = Encoding.Default.GetBytes(str);
//用来存储转换过后的ASCII码
string textAscii = string.Empty;
for (int i = 0; i < textbuf.Length; i++)
{
textAscii += textbuf[i].ToString("X");
}
return textAscii;
}
catch (Exception ex)
{
Console.WriteLine("含中文字符串转ASCII异常" + ex.Message);
}
return "";
}
/// <summary>
/// ASCII转含中文字符串
/// </summary>
/// <param name="textAscii">ASCII字符串</param>
/// <returns></returns>
public static string ASCII2Str(string textAscii)
{
try
{
int k = 0;//字节移动偏移量
byte[] buffer = new byte[textAscii.Length / 2];//存储变量的字节
for (int i = 0; i < textAscii.Length / 2; i++)
{
//每两位合并成为一个字节
buffer[i] = byte.Parse(textAscii.Substring(k, 2), System.Globalization.NumberStyles.HexNumber);
k = k + 2;
}
//将字节转化成汉字
return Encoding.Default.GetString(buffer);
}
catch (Exception ex)
{
Console.WriteLine("ASCII转含中文字符串异常" + ex.Message);
}
return "";
}
测试:
static void Main(string[] args)
{
string testStr = "我爱China!";
Console.WriteLine(testStr);
string rtnStr = ASCII2Str(Str2ASCII(testStr));
Console.WriteLine("------------");
Console.WriteLine(rtnStr)
Console.ReadLine();
}
结果:
我爱China!
------------
我爱China!
中文字符不再乱码