摘要
C#编程语言中,Encoding
类是一个非常重要的类,它用于将字符串从一种编码转换为另一种编码。字符串是C#编程语言中的一个基本数据类型,它由一系列字符组成,而这些字符可以用不同的编码表示。因此,当我们需要将一个字符串从一种编码转换为另一种编码时,就需要使用Encoding
类。
正文
常用属性
ASCII | 获取 ASCII(7 位)字符集的编码。 |
BigEndianUnicode | 获取使用 Big Endian 字节顺序的 UTF-16 格式的编码。 |
BodyName | 在派生类中重写时,获取可与邮件代理正文标记一起使用的当前编码的名称。 |
CodePage | 在派生类中重写时,获取当前 Encoding 的代码页标识符。 |
DecoderFallback | 获取或设置当前 DecoderFallback 对象的 Encoding 对象。 |
Default | 获取此 .NET 实现的默认编码。 |
EncoderFallback | 获取或设置当前 EncoderFallback 对象的 Encoding 对象。 |
EncodingName | 在派生类中重写时,获取当前编码的用户可读说明。 |
HeaderName | 在派生类中重写时,获取可与邮件代理头标记一起使用的当前编码的名称。 |
IsBrowserDisplay | 在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码显示内容。 |
IsBrowserSave | 在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码保存内容。 |
IsMailNewsDisplay | 在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码显示内容。 |
IsMailNewsSave | 在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码保存内容。 |
IsReadOnly | 在派生类中重写时,获取一个值,该值指示当前的编码是否为只读。 |
IsSingleByte | 在派生类中重写时,获取一个值,该值指示当前的编码是否使用单字节码位。 |
Latin1 | 获取 Latin1 字符集 (ISO-8859-1) 的编码。 |
Unicode | 获取使用 Little-Endian 字节顺序的 UTF-16 格式的编码。 |
UTF32 | 获取使用 Little-Endian 字节顺序的 UTF-32 格式的编码。 |
UTF7 | 已过时。 获取 UTF-7 格式的编码。 |
UTF8 | 获取 UTF-8 格式的编码。 |
方法
Convert(Encoding, Encoding, Byte[]) | 将整个字节数组从一种编码转换为另一种编码。 |
Convert(Encoding, Encoding, Byte[], Int32, Int32) | 将字节数组内某个范围的字节从一种编码转换为另一种编码。 |
GetByteCount(Char*, Int32) | 在派生类中重写时,计算对一组字符(从指定的字符指针处开始)进行编码所产生的字节数。 |
GetByteCount(ReadOnlySpan<Char>) | 在派生类中重写时,计算对指定字符范围的字符进行编码所产生的字节数。 |
GetByteCount(String) | 在派生类中重写时,计算对指定字符串中的字符进行编码所产生的字节数。 |
GetBytes(Char, Int32, Byte, Int32) | 在派生类中重写时,将一组字符(从指定的字符指针开始)编码为一个字节序列,并从指定的字节指针开始存储该字节序列。 |
GetBytes(Char[]) | 在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。 |
GetBytes(String) | 在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。 |
GetBytes(String, Int32, Int32) | 在派生类中重写时,从指定的 index 开始,将指定字符串中由 count 指定的字符数编码为字节数组。 |
GetBytes(String, Int32, Int32, Byte[], Int32) | 在派生类中重写时,将指定字符串中的一组字符编码为指定的字节数组。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) | 在派生类中重写时,将指定字节数组中的字节序列解码为指定的字符数组。 |
GetChars(ReadOnlySpan<Byte>, Span<Char>) | 在派生类中重写时,将指定只读字节范围中的所有字节解码为字符范围。 |
GetDecoder() | 在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。 |
GetEncoder() | 在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。 |
GetEncoding(Int32) | 返回与指定代码页标识符关联的编码。 |
GetEncoding(Int32, EncoderFallback, DecoderFallback) | 返回与指定代码页标识符关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 |
GetEncoding(String) | 返回与指定代码页名称关联的编码。 |
GetEncoding(String, EncoderFallback, DecoderFallback) | 返回与指定代码页名称关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 |
GetEncodings() | 返回包含所有编码的数组。 |
GetHashCode() | 返回当前实例的哈希代码。 |
扩展方法
GetBytes(Encoding, ReadOnlySequence<Char>) | 使用指定的 Encoding 将指定的 ReadOnlySequence<T> 编码到 Byte 数组中。 |
GetChars(Encoding, ReadOnlySequence<Byte>, IBufferWriter<Char>) | 使用指定的 Encoding 将指定的 ReadOnlySequence<T> 解码为 char ,并将结果写入 writer 。 |
GetString(Encoding, ReadOnlySequence<Byte>) | 使用指定的 Encoding 将指定的 ReadOnlySeque |
通过GetBytes()可以把一个字符串或者是字符串数组转换成字节
string str = "这是一个测试";
byte[] bytes = Encoding.Unicode.GetBytes(str);
通过GetChars()可以将字节数组转换成字符
string str = "这是一个测试";
byte[] bytes = Encoding.Unicode.GetBytes(str);
char[] a = Encoding.Unicode.GetChars(bytes);
Console.WriteLine(a);
将汉字转换成GB2312互转
在.net下直接使用GB2312会出错
System.ArgumentException: ''gb2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')'
在.net下需要先nuget安装System.Text.Encoding.CodePages
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding fromEcoding = Encoding.GetEncoding("UTF-8");//返回utf-8的编码
Encoding toEcoding = Encoding.GetEncoding("gb2312");
byte[] fromBytes = fromEcoding.GetBytes("这是一个测试");
//字节数组从一种编码转换为另一种编码
byte[] tobytes = Encoding.Convert(fromEcoding, toEcoding, fromBytes);
var str = toEcoding.GetString(tobytes);//将字节数组解码成字符串
Console.WriteLine(str);