C#编程总结(九)字符编码
标签:
C#编程总结(九)字符编码相信大家一定遇到过乱码的问题,为什么会乱码呢?输出的数据怎么就跟输入的不一样呢?
最近在总结加密问题,也遇到了同样的困扰。所以今天来集中解决这个问题。
什么是字符?字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。
字符集(Charset)字符集(Charset)是一个系统支持的所有抽象字符的集合。
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
什么是字符编码?字符编码(Character Encoding):简单的说就是建立自然语言与机器语言之间的对应关系。是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。
计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。非数值信息和控制信息包括了字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计算机并得以处理,这种对字母和符号进行编码的二进制代码称为字符代码(Character Code)。计算机中常用的字符编码有ASCII码(美国标准信息交换码)和EBCDIC码(扩展的BCD交换码)。
在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。
困扰与疑惑?1、为什么会有字符编码?
含义介绍中已经给出了解释,字符编码就是让计算机识别自然语言。
2、为什么会有这么多的字符集?
计算机发展分不同阶段,最开始只是美国通用,建立了ASCII码,但是一些欧洲国家字符无法使用ASCII码,然后就对ASCII进行了扩展补充,后来中国要使用计算机,为了标记汉语,定义了GB2312、GBK、BIG5等,还有其他一些字符集。
3、就没有一种统一的字符集吗?
有,Unicode
4、UTF8与Unicode是什么关系?
UTF8是Unicode的一种实现方式。
常用的几种编码 1. ASCII码ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。
ASCII字符集:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
特点:单字节编码,只包含大小写英文字母、标点符号及其他符号。
ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。
计算机为美国人发明,开始的时候也只能满足自己,所以说此编码很有局限性。在其他的国家、其他语种无法使用此编码集。
根据ASCII码的编码规则,最多只能标识256个字符,,但是世界上有那么多语言,汉字就多达10万左右,那么多字符,显然很有局限性。
以下是ASCII代码表,表二为其扩展表。
特点:简体中文字符集,采用双字节编码。
GB2312或GB2312-80是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。
2.2 GBK特点:扩展了GB2312,包括非常用简体汉字、繁体字、日语及朝鲜汉字等。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67758.html
- 上一篇:C#编程总结(八)数字签名
- 下一篇:C#编程总结(一)序列化