CSharp-Encoding编码
在网络通信中,很多情况下都是将字符信息转成字节序列进行传输。将字符序列转为字节序列的过程称为编码。当这些字节传送到接收方,接收方需要逆向将字节序列转为字符序列。这个过程就是解码。
常见编码有ASCII字符集 ,非ASCII字符集 如GB2312 GB18030等,Unicode字符集。
在C#中,字符集默认是Unicode,一个英文占2个字节,一个汉字也占2个字节。Unicode能够表示大部分国家的文字,但是空间占用相对ASCII较为浪费。
为了节约空间,后续出现了UTF-8,UTF-16,UTF-32.
UTF8是使用最为广泛的一种UTF格式。属于Unicode的一种变长字符编码,一般使用1-4个字节编码表示一个Unicode字符,即将一个Unicode字符编为1-4个字节组成的UTF8格式,根据不同符号而变化字节长度。
UTF8字节序列在所有系统中都一样的,所以这样可以很容易的进行排序。
UTF16将每个码位表示为一个由1-2个16位整数组成的序列。
UTF32将每个码位表示为一个32位整数。
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 在派生类中重写时,获取一个值,该值指示当前的编码是否使用单字节码位。Unicode 获取使用 Little-Endian 字节顺序的 UTF-16 格式的编码。UTF32 获取使用 Little-Endian 字节顺序的 UTF-32 格式的编码。UTF7 获取 UTF-7 格式的编码。UTF8 获取 UTF-8 格式的编码。WebName 在派生类中重写时,获取在 Internet 编号分配管理机构 (IANA) 注册的当前编码的名称。WindowsCodePage 在派生类中重写时,获取与当前编码最紧密对应的 Windows 操作系统代码页。
Encoding编码方法
Clone() 当在派生类中重写时,创建当前 Encoding 对象的一个卷影副本。Convert(Encoding, Encoding, Byte[]) 将整个字节数组从一种编码转换为另一种编码。Convert(Encoding, Encoding, Byte[], Int32, Int32) 将字节数组内某个范围的字节从一种编码转换为另一种编码。Equals(Object) 确定指定的 Object 是否等同于当前实例。GetByteCount(Char*, Int32) 在派生类中重写时,计算对一组字符(从指定的字符指针处开始)进行编码所产生的字节数。GetByteCount(Char[]) 在派生类中重写时,计算对指定字符数组中的所有字符进行编码所产生的字节数。GetByteCount(Char[], Int32, Int32) 在派生类中重写时,计算对指定字符数组中的一组字符进行编码所产生的字节数。GetByteCount(String) 在派生类中重写时,计算对指定字符串中的字符进行编码所产生的字节数。GetBytes(Char*, Int32, Byte*, Int32) 在派生类中重写时,将一组字符(从指定的字符指针开始)编码为一个字节序列,并从指定的字节指针开始存储该字节序列。GetBytes(Char[]) 在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。GetBytes(Char[], Int32, Int32) 在派生类中重写时,将指定字符数组中的一组字符编码为一个字节序列。GetBytes(Char[], Int32, Int32, Byte[], Int32) 在派生类中重写时,将指定字符数组中的一组字符编码为指定的字节数组。GetBytes(String) 在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。GetBytes(String, Int32, Int32, Byte[], Int32) 在派生类中重写时,将指定字符串中的一组字符编码为指定的字节数组。GetCharCount(Byte*, Int32) 在派生类中重写时,计算对字节序列(从指定的字节指针开始)进行解码所产生的字符数。GetCharCount(Byte[]) 在派生类中重写时,计算对指定字节数组中的所有字节进行解码所产生的字符数。GetCharCount(Byte[], Int32, Int32) 在派生类中重写时,计算对字节序列(从指定字节数组开始)进行解码所产生的字符数。GetChars(Byte*, Int32, Char*, Int32) 在派生类中重写时,将一个字节序列(从指定的字节指针开始)解码为一组字符,并从指定的字符指针开始存储该组字符。GetChars(Byte[]) 在派生类中重写时,将指定字节数组中的所有字节解码为一组字符。GetChars(Byte[], Int32, Int32) 在派生类中重写时,将指定字节数组中的一个字节序列解码为一组字符。GetChars(Byte[], Int32, Int32, Char[], Int32) 在派生类中重写时,将指定字节数组中的字节序列解码为指定的字符数组。GetDecoder() 在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。GetEncoder() 在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。GetEncoding(Int32) 返回与指定代码页标识符关联的编码。GetEncoding(Int32, EncoderFallback, DecoderFallback) 返回与指定代码页标识符关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。GetEncoding(String) 返回与指定代码页名称关联的编码。GetEncoding(String, EncoderFallback, DecoderFallback) 返回与指定代码页名称关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。GetEncodings() 返回包含所有编码的数组。GetHashCode() 返回当前实例的哈希代码。GetMaxByteCount(Int32) 在派生类中重写时,计算对指定数目的字符进行编码所产生的最大字节数。GetMaxCharCount(Int32) 在派生类中重写时,计算对指定数目的字节进行解码时所产生的最大字符数。GetPreamble() 在派生类中重写时,返回指定所用编码的字节序列。GetString(Byte*, Int32) 在派生类中重写时,将在指定地址开始的指定字节数解码为字符串。GetString(Byte[]) 在派生类中重写时,将指定字节数组中的所有字节解码为一个字符串。GetString(Byte[], Int32, Int32) 在派生类中重写时,将指定字节数组中的一个字节序列解码为一个字符串。GetType() 获取当前实例的 Type。IsAlwaysNormalized() 使用默认范式获取一个值,该值指示当前编码是否始终被规范化。IsAlwaysNormalized(NormalizationForm) 在派生类中重写时,使用指定范式获取一个值,该值指示当前编码是否始终被规范化。MemberwiseClone() 创建当前 Object 的浅表副本。RegisterProvider(EncodingProvider) 注册编码提供程序。ToString() 返回表示当前对象的字符串。