C# 字符编码类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类位于System.Text空间下,主要用于在不同的编码和Unicode之间进行转换。也就是我们本篇主角。

1         //获得所有编码名称和其描述信息;
2         foreach (EncodingInfo encodingInfo in Encoding.GetEncodings())
3         {
4             Debug.Log(encodingInfo.Name+"///"+encodingInfo.GetEncoding().EncodingName);
5         }

//output: 95种字符集。

1         //获取某个指定的编码集;
2         Encoding gb2312 = Encoding.GetEncoding("GB2312");
3         Encoding ascii = Encoding.ASCII;
4         Encoding utf8 = Encoding.GetEncoding("UTF-8");
5         Debug.Log("headName::" + gb2312.HeaderName + "///" + gb2312.EncodingName);
6         Debug.Log("headName::" + ascii.HeaderName + "///" + ascii.EncodingName);
7         Debug.Log("headName::" + utf8.HeaderName + "///" + utf8.EncodingName);

1 //不同编码之间转换;
2         string str = "这个字符集是什么鬼?Pi(\u03a0)";
3         Encoding unicode = Encoding.Unicode;
4         Encoding utf_8 = Encoding.GetEncoding("UTF-8");
5         byte[] unicodeBytes = unicode.GetBytes(str);
6         byte[] utf8Bytes = Encoding.Convert(unicode, utf_8, unicodeBytes);
7         string value = utf_8.GetString(utf8Bytes);
8         Debug.Log("UTF8 String=" + value);

编码是将一组 Unicode 字符转换为一个字节序列的过程。与此相反,解码是将已编码的字节序列转换为 Unicode 字符的一组的过程。有关 Unicode 转换格式 (Utf) 和其他支持的编码信息Encoding,请参阅.NET Framework 中的字符编码

请注意,Encoding用于操作而不是任意的二进制数据如字节数组的 Unicode 字符。如果必须对任意二进制数据转换为文本进行编码,则应使用一种协议 (如 uuencode),通过实现的方法如Convert.ToBase64CharArray

.NET Framework 提供的以下实现Encoding类,以支持当前的 Unicode 编码和其他编码:

  • ASCIIEncoding将 Unicode 字符编码为单一 7 位 ASCII 字符。此编码仅支持字符的值之间 U + 0000 和 U + 007F。代码页已选中 20127。此外可通过ASCII属性。
  • UTF7Encoding将使用 utf-7 编码的 Unicode 字符编码。此编码支持所有 Unicode 字符值。代码页已选中 65000。此外可通过UTF7属性。
  • UTF8Encoding将使用 utf-8 编码的 Unicode 字符编码。此编码支持所有 Unicode 字符值。代码页已选中 65001。此外可通过UTF8属性。
  • UnicodeEncoding将使用 utf-16 编码的 Unicode 字符编码。这两个小 endian 和 big endian 字节订单都受支持。此外可通过Unicode属性和BigEndianUnicode属性。
  • UTF32Encoding将使用 utf-32 编码的 Unicode 字符编码。同时小 endian (代码页 12000) 和 big endian (代码页 12001) 字节订单都受支持。此外可通过UTF32属性。

Encoding类主要用于不同的编码与 Unicode 之间转换。通常,派生的 Unicode 类之一是您的应用程序的正确选择。

使用GetEncoding方法来获取其他编码,并调用GetEncodings方法以获取所有编码的列表。

下表列出了.NET Framework 中受支持的编码。其中列出了每种编码的代码页编号以及的编码的值EncodingInfo.NameEncodingInfo.DisplayName属性。最后一列中的星号表示.NET Framework 中,而不考虑基础平台本身支持的代码页。请注意,代码页其EncodingInfo.Name属性对应于一种国际标准不一定是符合该标准填满中。


代码页


名称


显示名称


.NET framework 的支持


37


IBM037


IBM EBCDIC (美国加拿大)

 

437


IBM437


OEM 美国

 

500


IBM500


IBM EBCDIC (国际)

 

708


ASMO 708


阿拉伯语 (ASMO 708)

 

720


DOS 720


阿拉伯语 (DOS)

 

737


ibm737


希腊语 (DOS)

 

775


ibm775


波罗的语 (DOS)

 

850


ibm850


西欧语 (DOS)

 

852


ibm852


中欧语 (DOS)

 

855


IBM855


OEM 西里尔文

 

857


ibm857


土耳其语 (DOS)

 

858


IBM00858


OEM 多语言拉丁语我

 

860


IBM860


葡萄牙语 (DOS)

 

861


ibm861


冰岛语 (DOS)

 

862


DOS-862


希伯来语 (DOS)

 

863


IBM863


加拿大法语 (DOS)

 

864


IBM864


阿拉伯语 (864)

 

865


IBM865


北欧 (DOS)

 

866


cp866


西里尔语 (DOS)

 

869


ibm869


希腊语、 现代 (DOS)

 

870


IBM870


IBM EBCDIC (多语言拉丁语-2)

 

874


windows-874


泰语 (Windows)

 

875


cp875


IBM EBCDIC (希腊语现代)

 

932


shift_jis


日语 (SHIFT-JIS)

 

936


gb2312


简体中文 (GB2312)


?


949


ks_c_5601-1987


朝鲜语

 

950


big5


繁体中文 (Big5)

 

1026


IBM1026


IBM EBCDIC (土耳其语拉丁文-5)

 

1047


IBM01047


IBM 拉丁语 1

 

1140


IBM01140


IBM EBCDIC (美国加拿大欧元)

 

1141


IBM01141


IBM EBCDIC (德国欧元)

 

1142


IBM01142


IBM EBCDIC (丹麦挪威欧元)

 

1143


IBM01143


IBM EBCDIC (芬兰瑞典欧元)

 

1144


IBM01144


IBM EBCDIC (意大利欧元)

 

1145


IBM01145


IBM EBCDIC (西班牙欧元)

 

1146


IBM01146


IBM EBCDIC (英国欧元)

 

1147


IBM01147


IBM EBCDIC (法国欧元)

 

1148


IBM01148


IBM EBCDIC (国际欧元)

 

1149


IBM01149


IBM EBCDIC (冰岛语欧元)

 

1200


utf-16


Unicode


?


1201


unicodeFFFE


Unicode (big-endian)


?


1250


windows-1250


中欧语 (Windows)

 

1251


windows-1251


西里尔语 (Windows)

 

1252


Windows -1252


西欧语 (Windows)


?


1253


windows-1253


希腊语 (Windows)

 

1254


windows-1254


土耳其语 (Windows)

 

1255


windows-1255


希伯来语 (Windows)

 

1256


windows-1256


阿拉伯语 (Windows)

 

1257


windows-1257


波罗的语 (Windows)

 

1258


windows-1258


越南语 (Windows)

 

1361


韩文


朝鲜语 (韩文)

 

10000


macintosh


西欧语 (Mac)

 

10001


x mac 日语


日语 (Mac)

 

10002


x-mac chinesetrad


繁体中文 (Mac)

 

10003


朝鲜语 mac x-


朝鲜语 (Mac)


?


10004


x mac 阿拉伯


阿拉伯语 (Mac)

 

10005


希伯来语 mac x


希伯来语 (Mac)

 

10006


x-mac 希腊语


希腊语 (Mac)

 

10007


x-mac-西里尔语


西里尔语 (Mac)

 

10008


x-mac chinesesimp


简体中文 (Mac)


?


10010


罗马尼亚语 mac x-


罗马尼亚语 (Mac)

 

10017


x-mac-乌克兰语


乌克兰语 (Mac)

 

10021


x mac 泰语


泰语 (Mac)

 

10029


x-mac ce


中欧语 (Mac)

 

10079


冰岛语 mac x-


冰岛语 (Mac)

 

10081


x mac 土耳其语


土耳其语 (Mac)

 

10082


克罗地亚语 mac x-


克罗地亚语 (Mac)

 

12000


utf-32


Unicode (UTF-32)


?


12001


utf-32be


Unicode (utf-32 Big endian)


?


20000


x-中文 CNS


繁体中文 (CN)

 

20001


x cp20001


TCA 中国台湾地区

 

20002


x-中文 Eten


繁体中文 (Eten)

 

20003


x cp20003


IBM5550 中国台湾地区

 

20004


x cp20004


TeleText 中国台湾地区

 

20005


x cp20005


Wang 中国台湾地区

 

20105


x IA5


西欧语 (IA5)

 

20106


x IA5 德语


德语 (IA5)

 

20107


瑞典-语 IA5 x


瑞典语 (IA5)

 

20108


挪威语 IA5 x


挪威语 (IA5)

 

20127


我们 ascii


US ASCII


?


20261


x cp20261


T.61

 

20269


x cp20269


ISO -6937

 

20273


IBM273


IBM EBCDIC (德国)

 

20277


IBM277


IBM EBCDIC (丹麦挪威)

 

20278


IBM278


IBM EBCDIC (芬兰瑞典)

 

20280


IBM280


IBM EBCDIC (意大利)

 

20284


IBM284


IBM EBCDIC (西班牙)

 

20285


IBM285


IBM EBCDIC (适用于英国)

 

20290


IBM290


IBM EBCDIC (日语的片假名)

 

20297


IBM297


IBM EBCDIC (法国)

 

20420


IBM420


IBM EBCDIC (阿拉伯语)

 

20423


IBM423


IBM EBCDIC (希腊语)

 

20424


IBM424


IBM EBCDIC (希伯来语)

 

20833


x-EBCDIC KoreanExtended


IBM EBCDIC (扩展朝鲜语)

 

20838


IBM 泰语


IBM EBCDIC (泰语)

 

20866


koi8-r


西里尔语 (KOI8 R)

 

20871


IBM871


IBM EBCDIC (冰岛语)

 

20880


IBM880


IBM EBCDIC (西里尔文俄语)

 

20905


IBM905


IBM EBCDIC (土耳其语)

 

20924


IBM00924


IBM 拉丁语 1

 

20932


EUC-JP


日语 (JIS 0208 1990年和 0212年 1990年)

 

20936


x cp20936


简体中文 (GB2312-80)


?


20949


x cp20949


朝鲜语 Wansung


?


21025


cp1025


IBM EBCDIC (西里尔文塞尔维亚语-保加利亚语)

 

21866


koi8-u


西里尔语 (KOI8 U)

 

28591


iso 8859-1


西欧语 (ISO)


?


28592


iso 8859-2


中欧语 (ISO)

 

28593


iso 8859-3


拉丁文 3 (ISO)

 

28594


iso 8859-4


波罗的语 (ISO)

 

28595


iso 8859-5


西里尔语 (ISO)

 

28596


iso 8859-6


阿拉伯语 (ISO)

 

28597


iso 8859-7


希腊语 (ISO)

 

28598


iso 8859-8


希伯来语 (ISO Visual)


?


28599


iso 8859-9


土耳其语 (ISO)

 

28603


iso 8859-13


爱沙尼亚语 (ISO)

 

28605


iso 8859-15


拉丁文 9 (ISO)

 

29001


x 木


 

38598


iso 8859-8 i


希伯来语 (ISO 逻辑)


?


50220


iso 2022-jp


日语 (JIS)


?


50221


csISO2022JP


日语 (JIS 允许 1 字节假名)


?


50222


iso 2022-jp


日语 (JIS 允许 1 位字节假名-因此 / SI)


?


50225


iso-2022 kr


朝鲜语 (ISO)


?


50227


x cp50227


简体中文 (ISO 2022)


?


51932


euc jp


日语 (EUC)


?


51936


EUC CN


简体中文 (EUC)


?


51949


euc kr


朝鲜语 (EUC)


?


52936


hz gb-2312


简体中文 (HZ)


?


54936


GB18030 字符


简体中文 (GB18030)


?


57002


x-iscii de


ISCII 梵文


?


57003


x iscii 是


ISCII 孟加拉语


?


57004


x-iscii-ta


ISCII 泰米尔语)


?


57005


x-iscii te


ISCII 泰卢固语


?


57006


x-作为 iscii


ISCII 阿萨姆语


?


57007


x iscii 或


ISCII 奥里雅语


?


57008


x-iscii ka


ISCII 埃纳德语


?


57009


x-iscii ma


ISCII 马拉雅拉姆语


?


57010


x-iscii gu


ISCII 古吉拉特语


?


57011


x-iscii pa


ISCII 旁遮普语


?


65000


utf-7


Unicode (UTF-7)


?


65001


utf-8


Unicode (UTF-8)


?

MSDN Encoding  >>> https://msdn.microsoft.com/zh-cn/library/system.text.encoding%28v=vs.110%29.aspx

时间: 2024-10-24 00:49:53

C# 字符编码类Encoding的相关文章

字符集与字符编码 (charset & encoding)

乱码是个大坑,相信每个人都遇过,而且是个绕不过去的坑.我理解每个程序员都应该写一篇编码相关的博文,梳理自己对这一块的理解,下面是我反复理解多次之后的学习小结. 1.从记事本的不同编码说起: 打开记事本,输入“我我”,保存为ansi编码(其实是gb2312,这也是默认编码).再分别另存为unicode(其实是utf-16 little endian).unicodeBigEndian(其实是utf-16 big endian).utf8,用UltraEdit打开,切换到二进制模式,内容如下: 编码

Java IO4:字符编码

前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流, 那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概念,因此这边文章就专门详细写一下字符编码,具体 的网上有很多,但本文目的是尽量讲清楚各种编码方式的作用,个人认为,不求.也没有必要对字符编码理解地多么深入. 字符集和字符编码 第一个概念就是字符集和字符编码之间的区别: 1.字符集(charset) 字符集指的是一个系统支持的所有抽象字符的集合.字符是各种文

浅谈字符编码

前言 我们知道,.NET Framework 在内部将文本(string)存储为 Unicode UTF-16.在 .NET Framework Base Class Library 中,System.Text.Encoding 类及其派生类提供了对字符编码的支持.Encoding 类的静态GetEncodings 方法返回包含所有编码的数组. 源程序代码 让我们写个 C# 程序来查看一下 BCL 所支持的所有字符编码吧.下面就是 EncodingTester.cs: 01: using Sys

.NET Framework 中的字符编码

字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配对时使用的是适合在电报线路中传输的点和线模式. 计算机的字符编码将所支持字符集中的每个字符与代表该字符的数值进行配对.字符编码具有两个不同的组件: 编码器,将字符序列转换为数值序列(字节). 解码器,将字节序列转换为字符序列. 字符编码描述了编码器和解码器的操作规则. 例如,UTF8Encoding

关于Unicode,字符集,字符编码

基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支持西欧语言的字符集合,支持中文的字符集合.字符集合只定义了符号和他们的语意,其实跟计算机没有直接关系. 现实生活中,不同的语系有自己的字符集合,例如藏文有自己的字符集合,汉文有自己的字符集合.到计算机的世界中,也有各种字符集合,例如ASCII字符集合,GB2312字符集合,GBK字符集合.还有一个其

Windows程序员必须知道的字符编码和字符集

 字符编码 (Character encoding) 在存储和传递文本过程中,为了使得所有电脑都能够正确的识别出文本内容,需要有一个统一的规则. 2. 字符集 (Character Set) ) 一般情况,一种编码方式对应一种字符集.如 ASCII,对应 ASCII 字符集.GBK 编码方式对应 GBK 字符集.但是也有一种编码方式,多种字符集的,Unicode 字符集有多种编码方式,如 utf-8,utf-16 等.  3.  ASCII ASCII(American Standard Cod

字符集和字符编码

1. 概述 现在的编程语言对字符串的处理一般封装比较好,所以平时编写代码,很少要自己考虑字符编码问题.以前学习xml时,由于xml的存储涉及到编码格式,查过一些资料,知道一些概念,GB2312.Unicode.Utf-8.Utf-16.UCS-2等,但这些概念之间什么关系,仍然一知半解.最近要做国际化,需要把不支持Unicode的程序升级为Unicode,借着这个机会,把其中的知识梳理了一遍,对字符编码的理解算更系统化了,在此总结一下. 2. 字符集和字符编码 首先明确两个概念,"字符集&quo

刨根究底字符编码之一——关键术语解释(上)

声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本上也有少量修改,因为网上文章随意性较大,很多明显的笔误或前后矛盾之处,如若不改反而让人迷糊)而标明了原作者和出处之外,其余由于基本上已按自己的理解作了大量改写,因此没有再一一予以说明,在此对原作者表示歉意并感谢.另外,文中图片来自网络,也不在一一说明.同时,文中若有错漏,还请直接招呼板砖,不用客气. 关键术语解释 位: 即比特(Bit),亦称二进制位.比特位.位元.位,指二进制数中的一位,是计算机中信息表示的最小单位.B

python基础12 字符编码

主要内容 字符编码 字符编码 基本概念 字符(Character) 是各种文字和符号的总称. 字符集(Character set) 是一个系统支持的所有抽象字符的集合. 字符编码(Character encoding) 是把字符集中的字符,编码为特定的二进制数,以便在计算机中存储.每个字符集中的字符都对应一个唯一的二进制编码. 字符集和字符编码一般都是成对出现的,如ASCII.IOS-8859-1.GB2312.GBK,都是即表示了字符集又表示了对应的字符编码.Unicode比较特殊,有多种字符