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之间进行转换。也就是我们本篇主角。
//获得所有编码名称和其描述信息;
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 编码基本概念 只有先了解字符表.编码字 ...
随机推荐
- 2015-01-16 .Net 中级软件工程师 笔试题
一 C#方面 1.请简述多线程需要考虑的主要因素 答:1.线程管理 同一核上的两个线程不会以两倍的时长完成,可能需要用两倍再加10 %左右的时间来完成.与一个线程相比较的话,三个线程在同一核上想占用1 ...
- MVC5+EF6 入门完整教程九
前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发一个最基本的登录界面,介绍了如何从Co ...
- WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))
第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...
- MySQL中如何查看“慢查询”,如何分析执行SQL的效率?
一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...
- mac 解决eclipse OutOfMemoryError
1.找到eclipse.ini文件 找到你的eclipse图标右击————>显示包内容-->contents -->macos -->eclipse.ini 2.修改内容 -s ...
- (转)如何用Maven创建web项目(具体步骤)
原文链接:http://blog.csdn.net/chuyuqing/article/details/28879477 使用eclipse插件创建一个web project 首先创建一个Maven的 ...
- windbg无法下载符号文件
symbol file path: srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols 即使设置是对的,但我用.reload, ...
- 关于arcengine中geoprocessor使用的困惑
最近在实验一个小功能,就是用arcengine10.1做一个小程序,将point类型的shp转换为polyline类型的shp文件,用到的工具是pointstoline,但就是在设置input_fea ...
- Topcoder SRM558 1000 SurroundingGame
题意:给定一个网格,每个网格有选取代价和占据收益.每个点被占据,需要满足以下两个条件至少一个条件:1.被选取 2.邻近方格都被选取(有公共边被称为邻近) 不一定要占据所有方格,求最大收益. 第一直 ...
- WebView 的使用----android 网络连接处理分析
在Android中,可以有多种方式来实现网络编程: 创建URL,并使用URLConnection/HttpURLConnection 使用HttpClient 使用WebView 创建URL,并使用U ...