ASCII码 首先,ASCII码是一种字符编码方式,我们为什么要对字符进行编码呢?...由于每个国家扩展的内容不同,因此扩展ASCII码是一种非国际标准。...ord()函数在Python3中查看的是Unicode编码,不再是ASCII码了。 以“中国”为例,我们来看看Unicode的表示方法。...如图,UTF-8就是Unicode的一种实现方式,当数据在计算机内存中被处理时,统一使用Unicode编码。当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。...Base64编码的作用: 某些系统中只能使用ASCII字符,Base64是将非ASCII字符的数据转换成ASCII字符的一种方法。
ASCII码表示的,否则会出现语法错误 相当于Python2中的str类型,从网页上抓取下来的数据流也是该类型的 在Python3中,要得到一个bytes类型的变量,可以在字符串内容前面加入b得到,...但前提是该字符串的内容是可以完全由ascii码表示的,否则会出现语法错误。...>>>s2 = b'abc' >>>s2 b'abc' >>>type(s2) unicode unicode为解决传统字符编码的局限性而产生,为每一种语言的每一个字符设置了统一且唯一的二进制码...,Python内部用于记录的也是该编码方式 上面的例子中s1就是通过unicode码来进行存储的 str 在Python3中的str类型对应的就是Python2中的unicode类型,即以统一的unicode...bytes通过某一种编码方式(decode)得到str,而str通过某一种解码方式(encode)得到bytes ?
为了便于理解,这里需要展开一下ASCII和Unicode分别是什么。ASCII是一种编码方式,以一个字节(Byte)为单位保存一个字符,共256种状态。...问题就在于python2和python3在字符串处理的设计思路不同,python2中会默认把所有Unicode读成1个字节然后用ASCII解码,因此默认情况下,ASCII编码的英文字符不会出现任何问题,...但是python3不会对Unicode做任何解码,保留Unicode字符,然后用默认的解码方式(一般为UTF-8)来解码。...首先来看场景一:将python3代码改成python2. 这种需求乍看上去很奇怪,但是笔者确实遇到了这种情况。...这种需求应该是非常常见的一种了,随着python2彻底成为历史,如果你手上还有不兼容python3的python2代码,确实应该考虑把它迁移到python3了。
本文就把python中的字符串处理一次性讲解清楚~ASCII、Unicode和UTF-8的关系由于计算机只能处理二进制,字符串类型必须转为数字才能处理,所以字符串是一种特殊的数据类型,它需要编解码才能在计算机中进行处理...在最早计算机使用ASCII编码,只处理英文字母,数字和一些符号,所以127个字符就够了。随着计算机发展,全世界各国语言都需要显示,ASCII码不够用了。...ASCII编码是1个字节,UniCode编码通常是2个字节。但是英文字符明明1个字节就能搞定的事情,如果都统一使用UniCode,在空间上是一种浪费。...在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes也就是字节码。通常双引号或者单引号表示的,“中文”就是字符串,而b"中文"就是字节码。...而在python3后,认为python2的方式太复杂了,每次还要自己转一下。所以将decode和encode作为参数放入了IO接口中,不需要手动指定编码解码了。
一、常见编码 ASCII:ASCII码即美国标准信息交换码(American Standard Code for Information Interchange)。...标准ASCII 码一共规定了128个字符的编码,这是因为只使用了后面七位,最前面的一位统一规定为0。...之后IBM制定了128个扩充字符,这些字符并非标准的ASCII码,而是用来表示框线、音标和其它欧洲非英语系的字母。...那么有没有一种统一且唯一的编码方式呢?答案就是Unicode。...UTF-8 就是在互联网上使用最广的一种Unicode的实现方式,其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示)。
最近在用Python开发的时候,遇到些对中文数据的处理,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position...Python2 字符串设计上的一些缺陷: 使用 ASCII 码作为默认编码方式,对中文处理很不友好。...把字符串的牵强地分为 unicode 和 str 两种类型,误导开发者 当然这并不算 Bug,只要处理的时候多留心也可以避免这些坑。但在 Python3 两个问题都很好的解决了。...Python 默认脚本文件都是 UTF-8 编码的,当文件中有非 UTF-8 编码范围内的字符的时候就要使用”编码指示”来修正....,最后给出两种终极解决办法 1)第一种:这里我们将Python的默认编码方式修改为utf-8,就可以规避上述问题的发生,具体方式,我们在Python文件的前面加上如下代码: import sysdefaultencoding
皮皮Blog Python源码的编码方式 str与字节码 s = "人生苦短" s是个字符串,它本身存储的就是字节码(这个s定义在文件中的一行,或者命令行中的一行)。...Python 2:Python 2的源码.py文件默认的编码方式为ASCII 如果想使用一种不同的编码方式来保存Python代码,我们可以在每个文件的第一行放置编码声明(encoding...但是,Python 2.x的默认编码格式是ASCII,就是说,在没有指定 Python源码编码格式的情况下,源码中的所有字符都会被默认为ASCII码。...如果你要声明的字符串变量中存在非ASCII的字符,那么最好使用str2的声明格式,这样你就可以不需要执行decode,直接对字符串进行操作,可以避免一些出现异常的情况。...)不显式指定编码,则无法在源码中出现非ASCII字符。
例如,在ASCII码中,十进制65映射到字母A上。 ASCII码是上个世纪最流行的编码体系之一,至少在西方是这样。下图显示了ASCII码中编码单元是怎么映射到字符上的。 ?...其它国家的人趁这个机会开始使用128到255范围内的编码来表达自己语言中的字符。例如,144在阿拉伯人的ASCII码中是گ,而在俄罗斯的ASCII码中是ђ。...你必须告诉计算机使用哪种风格的ASCII码才能正确显示128-255号的字符。 ...,用两个字节来表示,无疑是浪费空间).于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes.UTF-8是一个非常惊艳的概念,它漂亮的实现了对ASCII码的向后兼容,以保证Unicode...四、字符编码的使用 ? 不管是哪种类型的文件,只要记住一点:文件以什么编码保存的,就以什么编码方式打开.
的规范化格式有几种,每种的处理方式有些不一样。...第一种使用整体字符”ñ”(U+00F1),第二种使用拉丁字母”n”后面跟一个”~”的组合字符(U+0303)。 在需要比较字符串的程序中使用字符的多种表示会产生问题。...Domain Names in Applications)IDNA是一种以标准方式处理ASCII以外字符的一种机制,它从unicode中提取字符,并允许非ASCII码字符以允许使用的ASCII字符表示...unicode转ASCII发生在IDNA中的TOASCII操作中。如果能通过TOASCII转换时,将会以正常的字符呈现。...而如果不能通过TOASCII转换时,就会使用“ACE标签”,“ACE”标签使输入的域名能转化为ASCII码 所以在新的urlsplit函数中会增加一个判断,如果规范化处理的结果和原来的结果一样,才能返回正确的值
两个版本都有两种字符串类型,用于存储二进制字节,Unicode字符。 python3相比于python2最大改变在于,python 3对文本和二进制数据作了更为清晰的区分,两者不可做任何隐式转化。...二进制字节 unicode字符 python2 str类型 unicode类型 python3 bytes类型 str类型 一、字符串的编码发展历史 字符串的编码最一开始是ascii,使用8位二进制表示...后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。...二、 字节码bytes python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。 1....四、字节码bytes与unicode字符的相互转换 python2可以隐式地将str类型(存储二进制字节)转换为unicode类型(存储unicode字符) Python3不会以任意隐式的方式混用
在Unicode时代,Python字符串已被证明是处理文本的一种便捷方法。 在本文中,我们就来研究Python字符串是如何演化并能处理各类文本的,特别是窥视其幕后的运作方式。...ASCII足以处理英文文本——供128个字符,但仅此而已。为了支持更多的语言,后来对ASCII进行了扩展,扩展到了256个字符,并用一个字节来编码每个字符。...请注意,UTF-8仅使用一个字节表示所有ASCII字符,因此任何ASCII编码的文本也是UTF-8编码的文本。这一特性是UTF-8被采用并成为网络上最主要的编码方式的原因之一。...但是我们可以更改设置,这样,调用该字符串方法就可以开始处理非ASCII编码的文本,例如: $ python2.7 >>> s = '\xef\xe8\xf2\xee\xed' # Russian 'питон...,缓冲区在此结构之后以相同的方式分配,只有struct_size 不同,char_size 可以是1, 2 或 4。
对于高级的使用,你可能需要更关注匹配引擎是如何执行给定的 RE,并通过一定的方式来编写 RE,以便产生一个可以运行得更快的字节码。...每一个字符对应一种匹配标志:re-A(只匹配 ASCII 字符),re-I(忽略大小写),re-L(区域设置),re-M(多行模式), re-S(....那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符举个栗子:.+) \1 会匹配 "FishC FishC" 或 "55 55",但不会匹配 "FishCFishC...对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的空白字符,即 [ \t\n\r\f\v] \S 匹配任何非 Unicode 中的空白字符,其实就是与 \s 相反;如果开启了 re.ASCII...对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的字母数字,即 [a-zA-Z0-9_] \W 匹配任何非 Unicode 的单词字符,其实就是与 \w 相反;如果开启了 re.ASCII
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。...ASCII码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。...互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种Unicode的实现方式。...UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。...Python3的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
字符串 python3的内置字符串类型默认是支持utf-8的,并且python的字符串提供有一套强大的处理工具集,为程序设计带来了巨大的便利。...注意 由于python3的str类型是Unicode的,因此我们应该摒弃C语言中一个ASCII字符对应于一个字节的想法。...对于非ASCII字符而言,一个字符对应的字节数是不定的,因为这取决于Unicode码点序列。...所以如果想要一个以\结尾的字符串,可以这么做 >>> r'......' + '\\' '......\\' 三引号 下面这个例子清晰的展示了三引号的强大之处。...例如: >>> chr(21435) '去' 对于ASCII而言,码点(Unicode编码)是我们熟悉的7位数字。
前言 最近在使用 Golang 的 regexp 对网络流量做正则匹配时,发现有些情况无法正确进行匹配,找到资料发现 regexp 内部以 UTF-8 编码的方式来处理正则表达式,而网络流量是字节序列...-8 后来提出了 UTF-8 编码方案,UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式;UTF-8 是一种变长的编码方式,编码规则如下: 1....对于单字节的符号,字节的第一位设为 0,后面 7 位为这个符号的 Unicode 的码点, 兼容 ASCII 2....2.UTF-8 是自同步码(Self-synchronizing_code),在 UTF-8 编码规则中,任意字符的第一个字节必然以 0 / 110 / 1110 / 11110 开头,UTF-8 选择...\a 或者 16进制,在代码中我们一般需要使用反引号包裹正则表达式(原始字符串),转义字符由 regexp 在内部进行解析处理,如下: 当然为了让 regexp 编译包含非 UTF-8 编码字符的表达式
字符编码 目前使用的编码方式有:ASCII码(一个字节)、Unicode码(两个字节)、UTF-8码(可变长的编码)。...我们已经知道了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。...编码方式 1.ASCII 现在我们面临了第一个问题:如何让人类语言,比如英文被计算机理解?我们以英文为例,英文中有英文字母(大小写)、标点符号、特殊符号。...ASCII 码显然没办法解决这个问题,为了解决这个问题,中国国家标准总局1980年发布《信息交换用汉字编码字符集》提出了GB2312编码,用于解决汉字处理的问题。...Unicode又被称为统一码、万国码;它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
ASCII 码 20 世纪 60 年代,计算机发明的早期,那时候美国是计算机领域的大哥,于是他们自己制定了一套字符编码,解决了英文和二进制间的对应关系,这个被称为 ASCII 码。...ASCII 码的基础上,又发明了很多别的编码。...Unicode 对世界上绝大多数的文字系统进行了整理,编码,使得电脑可以用更为简单的方式来呈现和处理文字,它伴随着通用字符集的标准而发展,同时也以书本的形式对外发表。...UTF - 8 UTF 就是 Unicode 的实现方式,而 UTF -8 是现在互联网上流传最广的 Unicode 实现方式,虽然它只是 Unicode 实现方式中的一种,但也隐约有武林盟主的地位。...UTF - 8 是一种针对 Unicode 的可变长度字符编码,也是一种前缀码,它可以用来表示 Unicode 标准中的任何字符,它也是现在电子邮件,网页以及其他存储或者发送文字的应用优先采用的编码。
字符编码是字符的表现、储存方式。 字符编码需要处理两件事: (1)规定一个字符集中的字符由多少个字节表示; (2)制定该字符集的字符编码表,即该字符集中每个字符对应的(二进制)值。...常见字符集有: ASCII GB2312 GBK GB18030 Big5 Unicode 一张图总结: ? 故事一:Python2与Python3的字符串类型?...当要将unicode字符串转换为str字符串或者写入文件时,python2默认使用ASCII 码保存数据,而ASCII 码无法识别大于128 的字符,于是报了上面的错误。 附ASCII码表: ?...如果直接存储的话可能导致无法分割字符串,也无法正确解码出字符。 故事五:UTF-8横空出世? 互联网的普及,强烈要求出现一种统一的编码方式。这时候UTF-8 出场。...UTF-8 是unicode在计算机中的一种实现方式。UTF-8是一种变长编码,每个字符占1-4 个字节。
计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。 2、ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。...3、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。...6.UTF-8 互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。...Unicode不兼容ASCII码,Utf-8兼容ASCII码 unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。...Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。
应运而生出现了万国码(Unicode),他涵盖了全球所有的文字和二进制的对应关系。 Unicode解决了字符和二进制的对应关系,但是使用unicode表示一个字符,太浪费空间。...由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!...UTF-32: 使用4个字节表示所有字符; 总结: UTF 是为unicode编码设计的一种在存储和传输时节省空间的编码方案。..., 所有的变量字符都会以unicode编码声明 编码转换过程 在 py2 和 py3 下分别运行下面这段程序 # coding: utf-8 s = '你好' print(s) Python3: '你好...首先, python2 是以 bytes 形式存储非英文字符串,所以bytes类型就是str >>> s = '你好' >>> type(s) Python3 的变革 Python3
领取专属 10元无门槛券
手把手带您无忧上云