Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略
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中的编码格式及常见编码问题详解)之详细攻略相关推荐
- Python中Unicode字符串(字符串编码问题)
Python中Unicode字符串(字符串编码问题) 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以 ...
- Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略
Python之sklearn:LabelEncoder函数简介(编码与编码还原).使用方法.具体案例之详细攻略 目录 LabelEncoder函数的简介(编码与编码还原) Methods LabelE ...
- ML之FE:金融风控—基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略
ML之FE:金融风控-基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略 ...
- Computer:正则表达式技术的简介(元字符/普通字符使用字典及其方法总结大全)、相关库介绍、案例应用之详细攻略
Computer:正则表达式技术的简介(元字符/普通字符使用字典及其方法总结大全).相关库介绍.案例应用之详细攻略 导读:正则表达式有等价的概念,比较晦涩难懂,其实,使用正则表达式本身就是个难题.当面 ...
- Computer:计算机测试理论(开发/测试/上线)之DEV、SIT、UAT、PRD四套环境详细介绍之详细攻略
Computer:计算机测试理论之DEV.SIT.UAT.PRD四套环境详细介绍之详细攻略 目录 测试理论 1.DEV.SIT.UAT.PRD四套环境的简介 SIT测试 和UAT测试对比
- Computer:路由器、交换机、猫Modem的简介、区别之详细攻略
Computer:路由器.交换机.猫Modem的简介.区别之详细攻略 目录 路由器.交换机的简介 交换机 路由器 猫Modem 外置式Modem的软件安装 外置式Modem的硬件安装 路由器.交换机. ...
- Computer:局域网内多台电脑共享文件夹图文教程之详细攻略
Computer:局域网内多台电脑共享文件夹图文教程之详细攻略 目录 局域网内多台电脑共享文件夹图文教程 1.启用来宾帐户 2.安装NetBEUI协议 3.查看本地安全策略设置是否禁用了GUEST账号 ...
- Computer:屏幕录像专家软件的简介、安装、使用方法之详细攻略
Computer:屏幕录像专家软件的简介.安装.使用方法之详细攻略 目录 屏幕录像专家软件的简介 屏幕录像专家软件的安装 1.安装图文教程 (1).安装主软件 (2).安装lxe播放器 屏幕录像专家软 ...
- Computer:MediaPreview的简介、安装、使用方法之详细攻略
Computer:MediaPreview的简介.安装.使用方法之详细攻略 目录 MediaPreview的简介 MediaPreview的安装 1.软件下载 2.图文安装教程 MediaPrevie ...
最新文章
- 计算机组成原理:储存系统和结构
- Python 技巧篇-官方网站打不开的情况下通过官方获取最新python安装包方法
- k8s部署oracle-ee-11g:部署、集群内外连接oracle的方式
- Ambari 2.6.0 HDP 2.6.3集群搭建
- keras构建卷积神经网络_在Keras中构建,加载和保存卷积神经网络
- iOS应用国际化教程(2014版)
- 数据库MySQL(课下作业,必做)
- python成长之路【第七篇】:面向对象
- 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
- Python之路——Python3 入门教程
- 关系型数据库一致性的理解
- Java反编译工具汇总
- android 下载目录,android – FileProvider – 从下载目录中打开文件
- 高校大数据产品有哪些
- (七)数字后端之形式验证
- HDU 2246 神题?一千多行
- 常量和常变量(const)
- sql语句分类(附mysql实操语句)
- Buy and Resell hdu-6438 贪心 优先队列
- spark常用RDD算子 - take(),takeOrdered(),top(),first()
热门文章
- strstr函数的自己实现
- 【异常分析】Springboot中使用测试类报空指针(at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs)
- 大数据DataX(三):DataX安装及使用
- MyCat2分库分表的基本操作
- mysql数据库的配置
- Excel VBA:设置单元格边框
- centos7安装dos2unix
- anaconda的正确安装
- U盘启动盘如何重装系统?U盘重装系统教程
- 整流线性单元(Relu)及其变种(Leaky Relu、PRelu、ELU、SELU、CRelu、RRelu)