字符编码学习总结

字符集与字符编码

想要弄明白文本的编码是怎么回事,绕不过去字符集和字符编码这两个概念。

字符集

说白了就是某些特定字符的集合,如果把世界上不同国家文明的所有字符都放在一起组成一个集合,那么我们常见的 ASCII、GB2312、GBK、GB18030字符集都只是包含了该集合的一部分而已。而 Unicode 字符集是可以包含所有国家文明中的所有字符的。

字符编码

所有的文件在计算机中最终是以二进制序列来保存的,不同的序列就可以表示不同的内容。字符编码的目的就是对不同的字符编码设计合理的唯一二进制序列在计算机中进行存储表示。

我们知道,字节是计算机中对二进制序列表达最常用的单位,一字节的长度是8位,能够表达256种不同的状态,也就是256个不同的字符。

 

字符编码发展史

ASCII 码(American Standard Code for Information Interchange:美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。 前128个为常用的字符如运算符,字母,数字等,后 128个为特殊字符,不能存中文。

后来有了GB2312编码,虽然它能够覆盖大部分高使用频率的汉字,毕竟还是有无法编码的字存在。GBK 的出现弥补了少数汉字无法进行编码解析的问题,收录了两万多个中文字符它是 GB2312 编码的扩展,向下兼容 GB2312,同时包含了繁体字。

然而我汉语博大精深,两万多个字符也无法满足我们的需求了。GB18030进一步扩展了 GBK 所包含的字符集范围,甚至还包含少数民族文字。同时也是向下兼容 GBK、GB2312的。

但是,很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。为了统一所有文字的编码,Unicode应运而生。

Unicode(统一码、万国码)把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。事实证明,对可以用 ASCII 表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF-8。

UTF-8是对Unicode的压缩和优化,其特点是对不同范围的字符使用不同长度的编码。它不再使用最少2个字节,而是将所有的字符和符号进行分类:ASCII 码内容用1个字节保存,欧洲字符用2个字节保存,中文字符用3个字节保存……

Python字符编码格式

python2.x 默认使用ASCII编码格式

python3.x 默认使用UTF-8编码格式

字符编码转换

UTF-8转成GBK:

(1)首先解码(decode)为UNICODE编码

(2)然后编码(encode)为GBK编码

GBK转成UTF-8:

(1)首先解码(decode)为UNICODE编码

(2)然后编码(encode)为UTF-8编码

 - END -

原文地址:https://www.cnblogs.com/wujiaqing/p/10650370.html

时间: 2024-07-30 10:35:51

字符编码学习总结的相关文章

python --- 字符编码学习小结

上半年的KPI,是用python做一个测试桩系统,现在系统框架基本也差不多定下来了.里面有用到新学的工厂设计模式以及以及常用的大牛写框架的业务逻辑和python小技巧.发现之前自己写的代码还是面向过程思想的多,基本没有面向对象的思想,近半年看的代码给了很大的触动,我需要升级我的技能了,于是也花了挺多时间在这个KPI学习上,现在先总结下在做这个系统时我所面临到的python的字符编码问题. 字符编码问题,如果处理有问题,可能直接就报错了:如果处理不得当,中文就会显示乱码.这是最初接触字符编码遇到问

转:字符集和字符编码学习笔记

原文来自于:http://www.king-liu.net/146/ 在web开发中我们总会遇到这样那样的字符编码问题,例如,当我们在代码编辑器里可以好好显示的html文档在浏览器里却变成了乱码,有时候为了能让我们的页面正常显示我们可能要忙上一天都无法解决(我可是深有体会).为了搞清楚字符编码的问题,今天我也花了很长时间去百度.这里我和大家分享一下我的感想,不对之处,欢迎指正. 首先要了解下什么是字符编码和字符集. 字符集(Charset):是一个系统支持的所有抽象字符的集合.字符是各种文字和符

【Todo】Python字符编码学习

Python中经常出现字符编码问题,在这里统一整理吧. 参考这篇文章:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 另外这个人博客里面有不少关于Python的内容,可以看看.

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Python学习笔记1(变量,字符编码)

跟着老男孩教育Alex的视频学习Python,写博客记录自己的学习过程,记录所讲授的知识点. 此篇微博直接从学习一个程序的仪式感"Hello word"开始写起,例如Python的介绍.发展史.Python2和3的区别.安装.优缺点等,将不会在此记录. 这是我第一次编写博客,不管是内容总结还是外观形式都肯定会有所欠缺.不过这博客主要是给自己记录学习过程的,如果想自学的话,在此推荐给你Alex金角大王和Eric银角大王的微博. 金角大王传送门:http://www.cnblogs.com

Python学习Day2笔记(字符编码)

1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一个字符都占2个字节 16位#英文文档改为Unicode编码大小变大一倍 为解决这种浪费空间问题#出现了Unicode扩展集 Utf-8 为可变长的字符编码 默认英文字符按ASCII码存储 中文按照3个字节存储 编码都要先decode成unicode再转码成目标编码 #获取默认编码import sys

python学习笔记第四节(字符编码+文本操作+函数)

python中不存在常量这个意义只能用大写命名来说明这个赋值是个常量,实际均为变量 字符编码 内存中是unicode硬盘中是utf-8中间需要转换 python只有执行的时候才有字符编码的概念python2默认ascii码python3默认unicode 文件操作 写操作,w 没有就新建有则覆盖,a是追加 name 查看文件名encoding 查看字符编码 查看是否可读查看是否可写 true false 以文件字符来显示 seek 移动光标位置,以文件起始来读,字节,以0为单位utf-8三个字符

python学习第四天 --字符编码 与格式化

字符编码 与格式化 第三天已经知道了字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,

JAVA基础学习day22--IO流四-对象序列化、管道流、RandomAccessFile、DataStream、ByteArrayStream、转换流的字符编码

一.对象序列化 1.1.对象序列化 被操作的对象需要实现Serializable接口 1.2.对象序列化流ObjectOutputStream与ObjectInputStream ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化. ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的