各种编码方式详解,ASCII、ISO-8859-1、GB2312、GBK、UTF-16、UTF-8等

转自http://blog.csdn.net/zzm628/article/details/45217937

首先来说一下,为什么需要编码:

第一,我们知道在计算机中存储信息的最小单位是1个字节(byte),也就是8个bit,所以能表示的字符范围也就是0-255个。

第二,我们要表示的符号太多太多,远远超过256个,无法用1个字节来完全表示。所以就需要一种新的数据类型char,而从char到byte必须编码,反之为解码。


其实,编码解码就是完成的翻译过程(“翻译”很容易理解吧),各种编码方式就是一部部字典。


1、ASCII码

ASCII码,总共只有128个。0-31又被用于表示控制字符如换行、回车、删除等,剩下的才是一些打印字符,数量太少了。(表示英文和数字够了,有木有)


2、ISO-8859-1

该编码是在ASCII编码的基础上扩展出来的,但它仍然是单字节编码,总共只能表示256个字符


3、GB2312

GB2312的全称是《信息技术 中文编码字符集》,它是双字节编码,编码范围是A1-F7,其中A1-A9是符号区,总共包含682个符号;B0-F7是汉字区,包含6763个汉字。


4、GBK

GBK的全称是《汉字内码扩展规范》,它的出现是为了扩展GB2312,它的编码范围是8140-FEFE(去掉XX7F),总共有23940个码位,能表示21003个汉字,它的编码是和GB2312兼容的


5、UTF-16

UTF-16的出现是ISO想要创建一个全新的超语言字典,世界上所有的语言都可以通过这个字典来相互翻译,可想而知,这个字典是多么的复杂、庞大。UTF-16用两个字节来表示Unicode的转化格式(两个字节就是16个bit,所以要UTF-16),采用的是定长的表示方法,即任何字符都可以用两个字节表示。这样表示字符就是变得的非常方便。但是,也有一个缺陷,就是很大一部分的字符用一个字节就可以表示了,UTF-16却用两个字节,有些浪费存储空间。所以有另一个编码方式就出现了,也就是UTF-8


6、UTF-8

UTF-8采用了一种变长技术,每个编码区域有不同的字码长度,不同类型的字符可以由1-6个字节组成。

UTF-8的编码规则如下:

1) 如果是1个字节,最高位为0,则表示这是1个ASCII字符。可见,所有ASCII编码已经是UTF-8了

2) 如果是1个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节

3) 如果是1个字节,以10开始,表示它不是首字节,则需要向前查找才能得到当前字符的首字节。


结合所述,建议统一采用UTF-8的编码方式比较好。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来解答你的问题。 首先,我们需要了解一些基本概念: GBK 是一种针对汉字的编码方式,它能够表示所有的中文字符。而 UTF-8 是一种可变长度的编码方式,能够表示世界上所有的字符。 当我们在使用 GBK 编码的网页中嵌入了 UTF-8 编码的内容时,就会出现乱码的情况。同样,当我们在使用 UTF-8 编码的网页中嵌入了 GBK 编码的内容时,也会出现乱码的情况。 为了解决这个问题,我们需要进行编码的转换。具体的步骤如下: 1. 将 GBK 编码的内容转换成 UTF-8 编码的内容: 可以通过以下的方式来实现: ```python import codecs # 打开 GBK 编码的文件 with codecs.open('gbk.txt', 'r', 'gbk') as f: gbk_content = f.read() # 将 GBK 编码的内容转换成 UTF-8 编码的内容 utf8_content = gbk_content.encode('utf-8') # 将 UTF-8 编码的内容写入文件 with codecs.open('utf8.txt', 'w', 'utf-8') as f: f.write(utf8_content.decode('utf-8')) ``` 2. 将 UTF-8 编码的内容转换成 GBK 编码的内容: 可以通过以下的方式来实现: ```python import codecs # 打开 UTF-8 编码的文件 with codecs.open('utf8.txt', 'r', 'utf-8') as f: utf8_content = f.read() # 将 UTF-8 编码的内容转换成 GBK 编码的内容 gbk_content = utf8_content.encode('gbk') # 将 GBK 编码的内容写入文件 with codecs.open('gbk.txt', 'w', 'gbk') as f: f.write(gbk_content.decode('gbk')) ``` 希望这些信息能够帮助到你。如果你还有其他的问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值