c#中各种编码格式的区别
最近了解了一下C#中Encoding的不同编码方式的区别,和大家分享一下,如果有不对的地方还请各位批评指教。
简单的说,为什么需要编码? 比如,我们的计算机中需要表示字母'a','b'等等字母,然而这些字母如何在计算机内存中表示?众所周知,在计算机内存中数据是以二进制来表示的,这样,我们就需要将这些需要表示的字母和数字或者符号转换成能在计算机中表示的二进制表示,这就是编码的意义所在。
将字符编码成内存中的二进制表示,首先需要对字符集进行编码表示,每个编码代表一个固定的字符。然后再将这个字符的编码转换成内存中的二进制表示。
计算机常用字符的编码主要分为两种:ASCII码和Unicode码。
1. ASCII 码
ASCII(American Standard Code for Information Interchange) 美国信息互换标准代码,是基于拉丁字母的一套电脑编码系统。ASCII是标准的单字节字符编码方案,用于基于文本的数据,使用7位或者8位的二进制组合起来表示128或者256中可能的字符。
ASCII码最大的缺点就是只能表示美国英语中常用的字符数字和符号,不能表示其他语言中的字符符号等,比如中文中的汉字。
2. Unicode 码
Unicode码是能够容纳世界上所有的文字和符号的编码方案,成为统一码,满足跨语言跨平台的需求,Unicode码是基于通用字符集(Universal Character Set)的标准发展起来的。Unicode码能够容纳所有的字符符号等,所以被使用的更加广泛,ASCII几乎不怎么用了。
以上两种编码方式说明了如何将常用的字符进行编码,并赋予每个字符一个code point(a number)来表示,这个是固定的。方便以后的应用。比如汉字"字"对应的Unicode编码为23383.
在这两种编码表示的基础上,就可以将编码表示成内存中可以使用的二进制方式了。
1. ASCII码的编码比较简单,因为ASCII码是以字节为单位编码的,最大为255,直接可以使用一个字节在内存中进行表示,编码无需特殊操作。
2. Unicode编码相对比较负责,因为Unicode要表示所有语言的字母符号等,所以编码没有那么简单。