Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

目录

符串编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介

1、案例理解编码的原理

2、不同编码对比

python中的编码格式及常见编码问题详解

1、查看、设置python默认编码

2、如果默认是ascii编码,输出中文时,肯定出现编码错误

3、解决输出字符串乱码问题


符串编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介

符编码(Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。
         在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码。

1、案例理解编码的原理

在显示器上看见的文字、图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片。
         假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1,凹的地方代表数字0。硬盘只能用0和1来表示所有文字、图片等信息。
         那么字母”A”在硬盘上是如何存储的呢?可能小张计算机存储字母”A”是1100001,而小王存储字母”A”是11000010,这样双方交换信息时就会误解。比如小张把1100001发送给小王,小王并不认为1100001是字母”A”,可能认为这是字母”X”,于是小王在用记事本访问存储在硬盘上的1100001时,在屏幕上显示的就是字母”X”。
         也就是说,小张和小王使用了不同的编码表。小张用的编码表是ASCII,ASCII编码表把26个字母都一一的对应到二进制1和0上;小王用的编码表可能是EBCDIC,只不过EBCDIC编码与ASCII编码中的字母和01的对应关系不同。

以上源自百度百科:字符编码_百度百科

2、不同编码对比

字符编码

时间

简介

ASCII编码

1961

ASCII 是 American Standard Code for Information Interchange 的缩写,美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。

基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。

(1)、一个字节,255字符。米国人在设计这个编码的时候,以为世界上只有英语一种语言,所以足够表达26个字母+9个数字+各种标点符号了。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。

(2)、主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。

MBCS编码/ANSI 编码

为了扩充ASCII编码,以用于显示本国的语言,不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码,又称为"MBCS(Muilti-Bytes Character Set,多字节字符集)"。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,所以在中文 windows下要转码成gb2312,gbk只需要把文本保存为ANSI 编码即可。

在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

GB2312编码

1980

GB2312 也是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。

(1)、GB2312编码通行于我国内地;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB 2312。

-------------------------------------------------------------

GB 2312的出现,基本满足了汉字的计算机处理需要,但对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

GBK编码

1980

GBK即汉字内码扩展规范,K为扩展的汉语拼音中“扩”字的声母。英文全称Chinese Internal Code Specification。GBK编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。GB2312码是中华人民共和国国家汉字信息交换用编码。

两个字节,GB2312(6000常用字)→GB18030(2W+字)。

(1)、Windows系统默认编码格式,windows系统默认编码为GBK;

BASE64编码

为了能让邮件系统正常的收发信件,就需要把由其他编码存储的符号转换成ASCII码来传输。比如,在一端发送GB2312编码->根据Base64规则->转换成ASCII码,接收端收到ASCII码->根据Base64规则->还原到GB2312编码。

UNICODE编码

世界上存在着多种编码方式,在ANSi编码下,同一个编码值,在不同的编码体系里代表着不同的字。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,可能最终显示的是中文,也可能显示的是日文。对同一个二进制编码值进行显示,采用了不同的编码,导致乱码。这个问题促使了unicode码的诞生。

如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。Unicode固然统一了编码方式,但是它的效率不高。

UTF-8编码

为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。

两个字节ISO ,国际标准化组织。unicode指的是万国码,是一种“字码表”,而utf-8是这种字码表储存的其中一种编码方法。把多国语言都统一到一套编码,其中UTF-8编码节省空间,还有UTF-16、UTF-32。

(1)、Linux系统的Ubuntu默认为UTF-8;

(2)、PyQt软件中默认的编码格式;

python中的编码格式及常见编码问题详解

Python2默认的编码是ASCII,而Python3默认的是utf-8。
(1)、Python中字符串类型分为byte string 和 unicode string两种。
(2)、Python进行同时包含 str 与 unicode 的运算时,Python 一律都把 str 转换成 unicode 再运算,当然,运算结果也都是 unicode。由于 Python 事先并不知道 str 的编码,它只能使用 sys.getdefaultencoding() 编码去 decode。
(3)、一般情况下,sys.getdefaultencoding() 的值总是 'ascii' ——显然,如果需要转换的 str 有中文,一定会出现错误。对于这个问题,建议在代码里的中文字符串前写上 u。
(4)、在 Python 3 已经取消了 str,让所有的字符串都是 unicode,这也许是个正确的决定。

1、查看、设置python默认编码

import sys
res = sys.getdefaultencoding()   #sys.setdefaultencoding('utf-8')设置默认格式为utf8
print(res)

2、如果默认是ascii编码,输出中文时,肯定出现编码错误

将输出的字符串转为unicode编码,或者格式化为unicode编码,然后输出

my_str = self.lineEdit.text()
self.textBrowser.append(my_str)
print(unicode(self.lineEdit.text()))

my_str = self.lineEdit.text()
self.textBrowser.append(my_str)
print(u'%s'%self.lineEdit.text())

3、解决输出字符串乱码问题

f = open(unicode(my_file), 'a+')
f.write(unicode(my_data).encode('utf8'))

Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略相关推荐

  1. Python中Unicode字符串(字符串编码问题)

    Python中Unicode字符串(字符串编码问题) 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以 ...

  2. Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略

    Python之sklearn:LabelEncoder函数简介(编码与编码还原).使用方法.具体案例之详细攻略 目录 LabelEncoder函数的简介(编码与编码还原) Methods LabelE ...

  3. ML之FE:金融风控—基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略

    ML之FE:金融风控-基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略 ...

  4. Computer:正则表达式技术的简介(元字符/普通字符使用字典及其方法总结大全)、相关库介绍、案例应用之详细攻略

    Computer:正则表达式技术的简介(元字符/普通字符使用字典及其方法总结大全).相关库介绍.案例应用之详细攻略 导读:正则表达式有等价的概念,比较晦涩难懂,其实,使用正则表达式本身就是个难题.当面 ...

  5. Computer:计算机测试理论(开发/测试/上线)之DEV、SIT、UAT、PRD四套环境详细介绍之详细攻略

    Computer:计算机测试理论之DEV.SIT.UAT.PRD四套环境详细介绍之详细攻略 目录 测试理论 1.DEV.SIT.UAT.PRD四套环境的简介 SIT测试 和UAT测试对比

  6. Computer:路由器、交换机、猫Modem的简介、区别之详细攻略

    Computer:路由器.交换机.猫Modem的简介.区别之详细攻略 目录 路由器.交换机的简介 交换机 路由器 猫Modem 外置式Modem的软件安装 外置式Modem的硬件安装 路由器.交换机. ...

  7. Computer:局域网内多台电脑共享文件夹图文教程之详细攻略

    Computer:局域网内多台电脑共享文件夹图文教程之详细攻略 目录 局域网内多台电脑共享文件夹图文教程 1.启用来宾帐户 2.安装NetBEUI协议 3.查看本地安全策略设置是否禁用了GUEST账号 ...

  8. Computer:屏幕录像专家软件的简介、安装、使用方法之详细攻略

    Computer:屏幕录像专家软件的简介.安装.使用方法之详细攻略 目录 屏幕录像专家软件的简介 屏幕录像专家软件的安装 1.安装图文教程 (1).安装主软件 (2).安装lxe播放器 屏幕录像专家软 ...

  9. Computer:MediaPreview的简介、安装、使用方法之详细攻略

    Computer:MediaPreview的简介.安装.使用方法之详细攻略 目录 MediaPreview的简介 MediaPreview的安装 1.软件下载 2.图文安装教程 MediaPrevie ...

最新文章

  1. 计算机组成原理:储存系统和结构
  2. Python 技巧篇-官方网站打不开的情况下通过官方获取最新python安装包方法
  3. k8s部署oracle-ee-11g:部署、集群内外连接oracle的方式
  4. Ambari 2.6.0 HDP 2.6.3集群搭建
  5. keras构建卷积神经网络_在Keras中构建,加载和保存卷积神经网络
  6. iOS应用国际化教程(2014版)
  7. 数据库MySQL(课下作业,必做)
  8. python成长之路【第七篇】:面向对象
  9. 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
  10. Python之路——Python3 入门教程
  11. 关系型数据库一致性的理解
  12. Java反编译工具汇总
  13. android 下载目录,android – FileProvider – 从下载目录中打开文件
  14. 高校大数据产品有哪些
  15. (七)数字后端之形式验证
  16. HDU 2246 神题?一千多行
  17. 常量和常变量(const)
  18. sql语句分类(附mysql实操语句)
  19. Buy and Resell hdu-6438 贪心 优先队列
  20. spark常用RDD算子 - take(),takeOrdered(),top(),first()

热门文章

  1. strstr函数的自己实现
  2. 【异常分析】Springboot中使用测试类报空指针(at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs)
  3. 大数据DataX(三):DataX安装及使用
  4. MyCat2分库分表的基本操作
  5. mysql数据库的配置
  6. Excel VBA:设置单元格边框
  7. centos7安装dos2unix
  8. anaconda的正确安装
  9. U盘启动盘如何重装系统?U盘重装系统教程
  10. 整流线性单元(Relu)及其变种(Leaky Relu、PRelu、ELU、SELU、CRelu、RRelu)