编码是一个将一组 Unicode 字符转换为一个字节序列的过程。而解码是将一个编码字节序列转换为一组 Unicode 字符的过程。
//*******************CodeTest**********************************
using System;
using System.Text;
namespace ConvertExample
{
class ConvertExampleClass
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi(/u03a0)";
// Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte[].
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
}
//*******************EndCode***********************************
ASCIIEncoding 将 Unicode 字符编码为单个 7 位 ASCII 字符。此编码仅支持 U+0000 和 U+007F 之间的字符值。
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class AsciiEncoding
{
public static void Main()
{
string unicode = "An Encoding String.";
ASCIIEncoding asciicoding = new ASCIIEncoding();
byte[] ba = asciicoding.GetBytes(unicode);
for (int i = 0; i < ba.Length; i++)
{
Console.Write("{0,3:X00}", ba[i]);
}
Console.WriteLine();
char[] ca = asciicoding.GetChars(ba);
for (int i = 0; i < ca.Length; i++)
{
Console.Write(ca[i]);
}
Console.WriteLine();
}
}
//*******************EndCode***********************************
C#中将字符串转成 Base64 编码
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class AsciiEncoding
{
public static void Main()
{
string a = "【我小小的空间】";
byte[] b = System.Text.Encoding.Default.GetBytes(a);
//转成 Base64 形式的 System.String
a = Convert.ToBase64String(b);
Console.Write(a);
Console.WriteLine();
//转回到原来的 System.String。
byte[] c = Convert.FromBase64String(a);
a = System.Text.Encoding.Default.GetString(c);
Console.Write(a);
Console.WriteLine();
}
}
//*******************EndCode***********************************
C#字符串和十六进制之间的转换方法
Byte.ToString 方法 (String)
使用指定的格式将当前 Byte 对象的值转换为它的等效字符串表示形式。
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class AsciiEncoding
{
/// <summary>
/// <函数:Encode>
/// 作用:将字符串内容转化为16进制数据编码,其逆过程是Decode
/// 参数说明:
/// strEncode 需要转化的原始字符串
/// 转换的过程是直接把字符转换成Unicode字符,比如数字"3"-->0033,汉字"我"-->U+6211
/// 函数decode的过程是encode的逆过程.
/// </summary>
/// <param name="strEncode"></param>
/// <returns></returns>
public static string Encode(string strEncode)
{
string strReturn = "";// 存储转换后的编码
foreach (short shortx in strEncode.ToCharArray())
{
//将字符串内容转化为16进制数据编码
strReturn += shortx.ToString("X4");
}
return strReturn;
}
/// <summary>
/// <函数:Decode>
///作用:将16进制数据编码转化为字符串,是Encode的逆过程
/// </summary>
/// <param name="strDecode"></param>
/// <returns></returns>
public static string Decode(string strDecode)
{
string sResult = "";
for (int i = 0; i < strDecode.Length / 4; i++)
{
//将16进制数据编码转化为字符串
sResult += (char)short.Parse(strDecode.Substring(i * 4, 4), global::System.Globalization.NumberStyles.HexNumber);
}
return sResult;
}
public static void Main()
{
string str1 = "This is a normal string";
//将字符串内容转化为16进制数据编码
string tranStr = Encode(str1);
Console.Write(tranStr);
Console.WriteLine();
//将16进制数据编码转化为字符串
string str2 = Decode(tranStr);
Console.Write(str2);
Console.WriteLine();
}
}
//*******************EndCode***********************************
C# 字符编码表
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class EncodingTest
{
public static void Main()
{
string encodingNameStr="";
foreach (EncodingInfo ed in Encoding.GetEncodings())
{
encodingNameStr += ed.DisplayName + "/n";
}
Console.Write(encodingNameStr);
}
}
//*******************EndCode***********************************
Encoding.GetEncoding 方法:返回指定代码页的编码。
Encoding.UTF8 属性:获取 UTF-8 格式的编码。
Encoding.GetBytes 方法 (String):在派生类中重写时,将指定的 string 中的所有字符编码为一个字节序列。
Encoding.GetString 方法
Encoding.GetString (Byte[]) 在派生类中重写时,将指定字节数组中的所有字节解码为一个字符串。
Encoding.GetString (Byte[], Int32, Int32) 在派生类中重写时,将指定字节数组中的一个字节序列解码为一个字符串。
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class EncodingTest
{
public static void Main()
{
string str = "我是中国人。";
string msg1 = "";
string msg2 = "";
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
System.Text.Encoding gb2312 = System.Text.Encoding.GetEncoding("GB2312");
//转换为 UTF8 编码方式
byte[] bytes1 = utf8.GetBytes(str);
msg1 = utf8.GetString(bytes1);
//转换为 GB2312 编码方式
byte[] bytes2 = gb2312.GetBytes(str);
msg2 = gb2312.GetString(bytes2);
Console.WriteLine(str);
Console.WriteLine(msg1);
Console.WriteLine(msg2);
}
}
//*******************EndCode***********************************
Byte.Parse 方法 (String)
将数字的字符串表示形式转换为它的等效 Byte 表示形式。
//*******************CodeTest**********************************
using System;
using System.IO;
using System.Text;
public class EncodingTest
{
public static void ParseByte(String stringToConvert)
{
try
{
byte MemberByte;
MemberByte = Byte.Parse(stringToConvert);
Console.WriteLine("The MemberByte value is {0}", MemberByte.ToString());
}
catch (System.OverflowException e)
{
Console.WriteLine("Exception: {0}", e.Message);
}
}
public static void Main()
{
string num = "123";
ParseByte(num);
}
}
//*******************EndCode***********************************
//*******************CodeTest**********************************
//*******************EndCode***********************************