在网络通信中,很多情况下都是将字符信息转成字节序列进行传输。将字符序列转为字节序列的过程称为编码。当这些字节传送到接收方,接收方需要逆向将字节序列转为字符序列。这个过程就是解码。
常见编码有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.Name和EncodingInfo.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的更多相关文章
-
字符集与字符编码 (charset &; encoding)
乱码是个大坑,相信每个人都遇过,而且是个绕不过去的坑.我理解每个程序员都应该写一篇编码相关的博文,梳理自己对这一块的理解,下面是我反复理解多次之后的学习小结. 1.从记事本的不同编码说起: 打开记事本 ...
-
PythonStudy——字符编码 Character Encoding
测试一下学习字符编码的问题:解决乱码问题 数据 从 硬盘 => 内存 => cpu应用程序打开文本文件的三步骤1.打开应用程序2.将数据加载到内存中3.cpu将内存中的数据直接翻译成字符显 ...
-
C# 一些知识点总结(二)_路径类,编码类,文件类...
Path 类:路径类path.GetFileName("文件路径")//获取完整文件名,包括文件名和文件拓展名Path.GetFileNameWithoutExtension(&q ...
-
关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
-
Java IO4:字符编码
前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流,那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概 ...
-
.NET Framework 中的字符编码
字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...
-
关于Unicode,字符集,字符编码
基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支 ...
-
Python2.7字符编码详解
目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...
-
Python 的字符编码
配置: Python 2.7 + Sublime Text 2 + OS X 10.10 本文意在理清各种编码的关系并以此解决 Python 中的编码问题. 1 编码基本概念 只有先了解字符表.编码字 ...
随机推荐
-
Android获取短信验证码
Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...
-
Composite(组合)--对象结构型模式
1.意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成 ...
-
pgpool postgresql集群、中间件
pgpool-II是一个工作于PostgreSQL服务器端和PostgreSQL客户端之间的中间件,它提供了如下的功能: 1.连接池 pgpool-II中保存了到PostgreSQL服务器的连接,然后 ...
-
freemaker分页模板
<link href="${base}/res/pra/css/style.css" rel="stylesheet" type="text/c ...
-
android Services注意地方
使用service前需要在manifest声明: <manifest ... > ... <application ... > <service android:name ...
-
ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版
主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...
-
Swift - 类扩展(extension)
Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如下事情: 1,给已有的类添加计算属性和计算静态属性 2,定义新的实例方法和类方法 3,提供新的构造器 4,定义下标脚本 5,是一个已有的 ...
-
Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
-
centos修改主机名的正确方法
1 centos6下修改hostname [root@centos6 ~]$ hostname # 查看当前的hostnmae centos6.magedu.com [root@centos6 ~]$ ...
-
『Python』PIL图像处理_形变操作
使用PIL.Image进行简单的图像处理 # coding=utf-8 from PIL import Image import matplotlib.pyplot as plt def show_i ...