在网络通信中,很多情况下都是将字符信息转成字节序列进行传输。将字符序列转为字节序列的过程称为编码。当这些字节传送到接收方,接收方需要逆向将字节序列转为字符序列。这个过程就是解码。

常见编码有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之间进行转换。也就是我们本篇主角。

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

//output: 95种字符集。

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

 //不同编码之间转换;
string str = "这个字符集是什么鬼?Pi(\u03a0)";
Encoding unicode = Encoding.Unicode;
Encoding utf_8 = Encoding.GetEncoding("UTF-8");
byte[] unicodeBytes = unicode.GetBytes(str);
byte[] utf8Bytes = Encoding.Convert(unicode, utf_8, unicodeBytes);
string value = utf_8.GetString(utf8Bytes);
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

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

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

    乱码是个大坑,相信每个人都遇过,而且是个绕不过去的坑.我理解每个程序员都应该写一篇编码相关的博文,梳理自己对这一块的理解,下面是我反复理解多次之后的学习小结. 1.从记事本的不同编码说起: 打开记事本 ...

  2. PythonStudy——字符编码 Character Encoding

    测试一下学习字符编码的问题:解决乱码问题 数据 从 硬盘 => 内存 => cpu应用程序打开文本文件的三步骤1.打开应用程序2.将数据加载到内存中3.cpu将内存中的数据直接翻译成字符显 ...

  3. C# 一些知识点总结(二)_路径类,编码类,文件类...

    Path 类:路径类path.GetFileName("文件路径")//获取完整文件名,包括文件名和文件拓展名Path.GetFileNameWithoutExtension(&q ...

  4. 关于Unicode,字符集,字符编码,每个程序员都应该知道的事

    关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...

  5. Java IO4:字符编码

    前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流,那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概 ...

  6. .NET Framework 中的字符编码

    字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...

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

    基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支 ...

  8. Python2.7字符编码详解

    目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...

  9. Python 的字符编码

    配置: Python 2.7 + Sublime Text 2 + OS X 10.10 本文意在理清各种编码的关系并以此解决 Python 中的编码问题. 1 编码基本概念 只有先了解字符表.编码字 ...

随机推荐

  1. 2015-01-16 .Net 中级软件工程师 笔试题

    一 C#方面 1.请简述多线程需要考虑的主要因素 答:1.线程管理 同一核上的两个线程不会以两倍的时长完成,可能需要用两倍再加10 %左右的时间来完成.与一个线程相比较的话,三个线程在同一核上想占用1 ...

  2. MVC5+EF6 入门完整教程九

    前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发一个最基本的登录界面,介绍了如何从Co ...

  3. WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))

    第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...

  4. MySQL中如何查看“慢查询”,如何分析执行SQL的效率?

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  5. mac 解决eclipse OutOfMemoryError

    1.找到eclipse.ini文件 找到你的eclipse图标右击————>显示包内容-->contents -->macos -->eclipse.ini 2.修改内容 -s ...

  6. (转)如何用Maven创建web项目(具体步骤)

    原文链接:http://blog.csdn.net/chuyuqing/article/details/28879477 使用eclipse插件创建一个web project 首先创建一个Maven的 ...

  7. windbg无法下载符号文件

    symbol file path: srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols 即使设置是对的,但我用.reload, ...

  8. 关于arcengine中geoprocessor使用的困惑

    最近在实验一个小功能,就是用arcengine10.1做一个小程序,将point类型的shp转换为polyline类型的shp文件,用到的工具是pointstoline,但就是在设置input_fea ...

  9. Topcoder SRM558 1000 SurroundingGame

    题意:给定一个网格,每个网格有选取代价和占据收益.每个点被占据,需要满足以下两个条件至少一个条件:1.被选取  2.邻近方格都被选取(有公共边被称为邻近)  不一定要占据所有方格,求最大收益. 第一直 ...

  10. WebView 的使用----android 网络连接处理分析

    在Android中,可以有多种方式来实现网络编程: 创建URL,并使用URLConnection/HttpURLConnection 使用HttpClient 使用WebView 创建URL,并使用U ...