C# 字符编码类Encoding

时间:2022-10-27 23:11:28

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

常见编码有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种字符集。

C# 字符编码类Encoding

         //获取某个指定的编码集;
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);

C# 字符编码类Encoding

 //不同编码之间转换;
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);

C# 字符编码类Encoding

编码是将一组 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. Android获取短信验证码

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  2. Composite(组合)--对象结构型模式

    1.意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成 ...

  3. pgpool postgresql集群、中间件

    pgpool-II是一个工作于PostgreSQL服务器端和PostgreSQL客户端之间的中间件,它提供了如下的功能: 1.连接池 pgpool-II中保存了到PostgreSQL服务器的连接,然后 ...

  4. freemaker分页模板

    <link href="${base}/res/pra/css/style.css" rel="stylesheet" type="text/c ...

  5. android Services注意地方

    使用service前需要在manifest声明: <manifest ... > ... <application ... > <service android:name ...

  6. ubuntu-10&period;04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版

    主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...

  7. Swift - 类扩展(extension)

    Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情: 1,给已有的类添加计算属性和计算静态属性 2,定义新的实例方法和类方法 3,提供新的构造器 4,定义下标脚本 5,是一个已有的 ...

  8. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  9. centos修改主机名的正确方法

    1 centos6下修改hostname [root@centos6 ~]$ hostname # 查看当前的hostnmae centos6.magedu.com [root@centos6 ~]$ ...

  10. 『Python』PIL图像处理&lowbar;形变操作

    使用PIL.Image进行简单的图像处理 # coding=utf-8 from PIL import Image import matplotlib.pyplot as plt def show_i ...