首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

unicode和utf8 —— 从一个

对于python内部来说,解释器处理操作系统的文件目录相关的东西时,必须使用unicode。新手如果要读取文件名并进行一些处理时,经常遇到乱码,以及windows和linux下效果不同的问题。...解释器如何正确读取字符呢?...这里要理解清楚所谓实现,其实多的就是一个字节数的信息,unicode和utf8本质上都是一串0和1,只是缺一个字节数量的区分,即,从信息量上来说: unicode + 自身长度 = utf8。...这样,在python解释器的处理过程中,python自然有办法用自己的标记来正确读写“自身长度”这个信息,因为这里不需要和外界交互,不需要类似utf8这样的约定规则,自己内部能正确获取信息即可。...文件中写死,本来理解是跟这个文件本身编码有关,但文件编码同样是utf8的情况下,windows下打印了Windows-1252(ISO-8859-1的超集),linux下仍然是utf8。

83010

python--一文搞懂字符串的编解码

在Python2中默认的编码是ASCII,不能识别中文字符,需要指定字符编码;在Python3中默认的编码是Unicode,可以识别中文字符;在计算节内存中,统一使用Unicode编码。...文本编辑从文件读取的UTF-8字符会被转为Unicode字符存在内存里,处理完后,要保存的时候再把Unicode转为UTF-8保存。这里面就有编码和解码的过程。我们先了解什么是编码和解码。...="strict")表示将utf8编码的字节码转为Unicode编码在使用open读取文件后,read读取了字节码,这时候需要使用文本正确的编码格式进行解码decode为Unicode 。...在write写文件时,则需要将Unicode编码encode为你希望的格式。通常代码中我们通常会在文件开头添加如下代码:#-*- coding: UTF-8 -*-意思就是代码使用了UTF-8编码。...())在python2下运行在python3下运行在python2中ASCII码是不能显示中文的,我们可以设置代码使用utf8编码reload(sys)sys.setdefaultencoding('utf

1.5K160
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不要再问我 Python2 和 Python3 的 Unicode 问题啦!

    ,报错的原因很简单,因为我们定义了一个 Unicode 字符串 u'李四',然后我们想把它保存到文本文件里,但是我们没有指定文件的编码,所以默认的是 ASCII 编码,显然用 Unicode 表示的汉字是无法用...Python2 & Python3 的 Unicode 前面铺垫的够多,现在我们算是正式来看 Python 中的字符串与字符编码之间的调用。...Python2 中也有两种表示字符序列的类型,分别是 str 和 Unicode,它与 Python3 的不同是,str 的实例包含原始的 8 位值,而 Unicode 的实例包含 Unicode 字符...也就是说 Python3 中字符串默认为 Unicode,但是如果在 Python2 中需要使用 Unicode,必须要在字符串的前面加一个 「u」前缀,形式参考上面例子中的写法。...当然了,在 Python2 中也可以默认使用 Unicode 的字符串,执行下面的操作即可: from __future__ import unicode_literals Python 字符串有 encode

    1.3K10

    Python13 字符转编码

    Unicode的基础上出现了Unicode的扩展集UTF8; UTF8中,英文如同ASCII一样,每个字母只占了1个字节,而每个中文占了3个字节; 目前中国Windows系统默认都是使用GBK字符集,如果一个软件使用的是...在python3中,默认是utf-8(utf-8属于unicode的扩展集) ---- python2编码 import sys print (sys.getdefaultencoding()) ?...所以要在文件开头进行声明,文件编码是gbk,注意这里只是声明文件编码是gbk和程序编码无关; 目前python3程序默认还是unicode ?...从unicode转成gbk ? 当前是bytes类型的数据,所以无法显示字符串 ? ? 注意在python3中,encode后不光转了编码,还将数据编程bytes类型 ? ?...---- windows默认是gbk linux默认是utf-8 python2默认是ascii python3默认是unicode 最终要记住的就是,无论在python2还是在python3上,要做的是确认当前使用的编码集

    73420

    Python 基础系列--字符串与编码

    字符串在编程中是使用频率最高的数据类型,像 web 网站中显示的中英文信息,使用记事本打开一个文本文件所看到的内容,软件呈现给用户的信息,包括你现在看到的文字,都属于字符串,可以说字符串无处不在。...python3 中的 print() 函数用于打印字符串(在 python2 中 print 是一个命令,可以不带括号) >>> s1="hello,world!" >>> s2="世界,你好!"...编码的问题理解了,我们再来看下 Python3 代码的执行过程。 首先 Python3 解释器找到源代码文件,按源代码文件声明的编码方式解码内存,再转成 unicode 字符串。...utf-8 转成了 unicode , 但是这只是 python3, 并不是所有的编程语言在内存里默认编码都是 unicode ,比如 python2 的默认编码是 ascii ,python2 解释器仅以文件头声明的编码去解释你的代码...python 2 的执行结果 可以看出 Python3 容忍你的偷懒,而 Python2 却不行,还需要你手工转换,Python3 在编码方面比 Python2 是有明显进步的,建议初学者从 Python3

    89321

    Python之编码

    一、Python2与Python3的区别 1、从宏观上考虑,Python2重复代码太多,错误率高,不够规范。Python崇尚的是语言简洁、优美、清晰。...Python3更加规范,重复代码少; 2、Python2默认的编码是ASCII码,无法正确识别中文,而Python3默认的代码是utf-8,能够正确识别中文; 3、Python2中print打印时后面可以不用加...(),但是Python3中print打印时必须加上(),否则会报错; 4、Python2中有range和xrange(生成器),但是Python3中只有range ; 5、Python3中的input,...注意: 1、各个编码之间的二进制是不能互相识别的,会产生乱码; 2、文件的储存、传输不能是unicode(只能是utf-8、utf-16、gbk、gb2312,ascii等) ?...Python3中  str 在内存中是用unicode编码。

    1.1K100

    python字符串编码

    深入中文编码问题 python3内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode...首先看一下源代码文件中使用字符串的情况。源代码文件作为文本文件就必然是以某种编码形式存储代码的,python2默认源代码文件是asci编码,python3默认源代码文件是utf-8编码。...Windows下控制台中的编码使用的是gbk,而在代码中使用的utf-8,python2按照utf-8编码打印到gbk编码的控制台下自然就会不一致而不能打印出正确的汉字。   ...格式存在于内存中,而如果不加u,表明这仅仅是一个使用某种编码的字符串,编码格式取决于python2对源码文件编码的识别,这里就是utf-8。   ...unicode类的构造函数接受一个字符串参数和一个编码参数,将字符串封装为一个unicode,比如在这里,由于我们用的是utf-8编码,所以unicode中的编码参数使用'utf-8',将字符封装为unicode

    2.1K10

    python2与python3的字符串编码对比

    两个版本都有两种字符串类型,用于存储二进制字节,Unicode字符。 python3相比于python2最大改变在于,python 3对文本和二进制数据作了更为清晰的区分,两者不可做任何隐式转化。...二进制字节 unicode字符 python2 str类型 unicode类型 python3 bytes类型 str类型 一、字符串的编码发展历史 字符串的编码最一开始是ascii,使用8位二进制表示...二、 字节码bytes python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。 1....在内存中,统一使用unicode编码,需要保存或者传输时,转换成UTF8编码。...四、字节码bytes与unicode字符的相互转换 python2可以隐式地将str类型(存储二进制字节)转换为unicode类型(存储unicode字符) Python3不会以任意隐式的方式混用

    57130

    python 之字符编码

    一个python文件中的内容是由一堆字符组成的(python文件未执行时)  2. python中的数据类型字符串是由一串字符组成的(python文件执行时) 三 字符编码发展史 阶段一:现代计算机起源于美国...,选对正确的解码方式就ok了,而存文件时乱码,则是一种数据的损坏。...总得意思:想要将其他的编码转换成utf-8必须先将其解码成unicode然后重新编码成utf-8,它是以unicode为转换媒介的 如:s='中文' 如果是在utf8的文件中,该字符串就是utf8编码,...reload(sys) sys.setdefaultencoding('utf8') #修改系统的默认编码 print sys.getdefaultencoding() python2和python3...中的字符编码 python2              str类型 ----------->字节编码后的二进制数据        字符串类型

    82620

    字符编码、python2和python3编码的区别

    python2和python3字符编码的区别 python2 python3 字符编码 文本编辑器存储信息的过程 打开编辑器就在内存中打开了一个进程,用编辑器编写的内容存在内存中,断电会丢失。...第二阶段:python解释器相当于文本编辑器,打开test.py文件,从硬盘将test.py文件从硬盘读入到内存中(python的解释性决定了解释器只关心文件的内容,不关心文件的后缀)。...由于内存中固定使用Unicode编码,我们只能改变存储到硬盘时使用的编码格式。...python2和python3字符编码的区别 python2 python2有两种存储形式,第一种:Unicode;第二种:按coding头选择存储格式,假设python2用utf8存储x='中文',当你...python3 python3只有Unicode一种存储变量的形式。Python2中默认使用ascii,Python3中默认使用utf-8,文本编辑器编写的文件默认为gbk编码格式。

    51530

    python3下常用编解码与加解密

    字符编解码 Python3相对于Python2的一大改变就是,对默认字符类型进行了修改。...Python2中定义字符串默认为二进制字符串,强制加前缀u的才是unicode字符串;而Python3中字符串默认为unicode,强制加前缀b的才是二进制字符串。...(也就是刚好反过来了) 这里的二进制字符串:指的是进行过编码后的字符串。即utf8、gbk、ascii等编码后的串都是二进制的。存放到文件的时候也必须是二进制的内容。...可以看到同样的字符串,在不同的编码中其对应的值是不一样的。...这是因为有些键可能有多个值的情况。(正常可能会发生的情况) 4、纯字符串URL编码 上面方法是对字典对象进行的编码,如果只需对单个字符串内容编码, 则可以使用quote方法。

    1.5K50

    Python encode和decode

    这是因为python3中表示文本的只有一种类型了,那就是str,你以为这是python2里的那个str吗?No! 这个str是python2中的unicode类型.........这样做的好处是: 在Python2中str和unicode都有decode,encode两种方法,但是字符集参数不设置正确的话,函数经常报错,文本能否正确流通取决于大家是否清楚输入编码的字符集,这对于全球化的网站来说是个巨坑...,而在Python3中无论你输入什么字符,统一都是str类型的(也就是python2里的unicode类型),通过bytes和str类型的分离将decode,encode这两种方法分离,encode函数不会出错...通过这种方式就避免了python2中输入str类型带来的编码混乱问题。...使用相似的观点来表述Python3中的bytes和str的区别就是:  bytes is text representation in bytes only if you know the charset

    1.8K21

    字符编码实战

    就是,一个字符串在任何其它编码中表现为合法的UTF-8的可能性很低 更多细节可以参考这里 UTF8 与 python 在 python 中,尤其是 python2 中,字符串的处理一直是很令人头疼的问题...根本原因是 python2 的字符串是 ASCII 编码的,也就是说 python 中的一个 string,它只能表示一个 ASCII 编码 的字符串,如果要表示 unicode 字符串怎么办呢,python2...in position 0: ordinal not in range(128) UTF8 与 go golang 中的字符串和 python3 中比较类似,形式上都是简单的字节数组。...golang 中的字符串(注意是 string literals,因为 string value 实际可以包含任意的 bytes)都是 utf8 的,包括代码中定义的字符串。...和 JSON Json 标准中默认大编码为 utf8, 实际在大部分时候无需在意编码的问题,但是使用 python2 另外。

    1.8K70

    Python - 了解bytes、str

    但是,Python3的str实例和Python2的unicode实例都没有和特定的二进制编码形式相关联。要想把Unicode字符转换成二进制数据,就必须使用encode方法。...程序的核心部分应该使用Unicode字符类型(也就是Python3中的str、Python2中的unicode),而且不要对字符编码做任何假设。...如果通过内置的open函数获取了文件句柄,那么请注意,该句柄默认会采用UTF-8编码格式来操作文件。而在Python2中,文件操作的默认编码格式则是二进制形式。...(10))    从文件中读取数据的时候也有这种问题。...- 在Python2中,str是一种包含8位值的序列,unicode是一种包含Unicode字符的序列。如果str只含有7位ASCII字符,那么可以通过相关的操作来同时使用str和unicode。

    1.1K10

    python基础之字符编码

    python文件指定头信息#-*-coding:utf-8-*-,那就使用默认的 python2中默认使用ascii,python3中默认使用utf-8  ?...x="egon",会被python解释器识别为字符串,会申请内存空间来存放字符串类型的值,至于该字符串类型的值被识别成何种编码存放,这就与python解释器的有关了,而python2与python3的字符串类型又有所不同...4.2 python2与python3字符串类型的区别 1)在python2中有两种字符串类型str和unicode str类型 当python解释器执行到产生字符串的代码时(例如x='上'),会申请新的内存地址...2)在python3 中也有两种字符串类型str和bytes str是unicode ?...很重要的一点是:看到python3中x.encode('gbk') 的结果\xc9\xcf正是python2中的str类型的值,而在python3是bytes类型,在python2中则是str类型 于是我有一个大胆的推测

    68520

    Python-基础05-字符编码

    ()查看,如果不在python文件指定头信息#-*-coding:utf-8-*-,那就使用默认的 python2中默认使用ascii,python3中默认使用utf-8  改正:在test.py...,至于该字符串类型的值被识别成何种编码存放,这就与python解释器的有关了,而python2与python3的字符串类型又有所不同。...---- python2与python3字符串类型的区别 在python2中有两种字符串类型str和unicode str类型 当python解释器执行到产生字符串的代码时(例如x='上'),会申请新的内存地址...x.encode('gbk'))) # 很重要的一点是:看到python3中x.encode('gbk') 的结果\xc9\xcf正是python2中的str类型的值,而在...python3是bytes类型,在python2中则是str类型 于是我有一个大胆的推测:python2中的str类型就是python3的bytes类型,于是我查看python2的str()源码,发现

    61450

    Python2 与 Python3 的编码对比

    在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类: 通用的 Unicode 字符; (unicode 被编码后的)某种编码类型的字符,比如 UTF-8...Python2 中字符的类型: str: 已经编码后的字节序列 unicode: 编码前的文本字符 Python3 中字符的类型: str: 编码过的 unicode 文本字符...Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。...Python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。...对于 str 为何种编码,有一些前提: Python 文件开始已经声明对应的编码 Python 文件本身的确是使用该编码保存的 两者的编码类型要一样(比如都是 UTF-8 或者都是 GBK 等) 这样

    93141

    用python的算法工程师们,编码问题搞透彻了吗?

    实际上,python3中的str对象和python2中的unicode对象在内存中就是用码位来表示字符的。...0x02 python3中码位和编码是如何表示的 在python3的代码中,str类型的对象就是用码位表示的字符串, 编码后的字节序列可以用bytes类型的对象表示。如下所示: ?...这里的不符合要求有两种情况,一种是字节序列错误的,一种就是用的解码器不合适。 SyntaxError python3默认使用UTF-8编码源码,python2则默认使用ASCII。...0x05 几种编码默认值的区别 locale.getpreferredencoding() 这个设置是打开文本文件时,默认使用的解码器。...open()里面传入文件名给python,这时的文件名是unicode字符串,python是用这个编码器对名字进行编码,转成字节序列后再去文件系统中查找的。 如下所示,是我电脑上的结果: ?

    73520

    Python | Python学习之unicode和utf8

    UTF8 UTF8编码相比于8bit的ASCII编码和16bit的unicode编码来说,UTF8编码是不定长的,它可以使用两个字节代表英文,用三个字节代表中文,UTF8这个时候优势就很大了,在实际运用中...,我们可以将文件编码互相转换以获取最大化的利用内存,把文件保存在内存中我们采用内存占用更小的UTF8编码的格式,读写文件时我们采用更大更全的unicode编码,具体实例图如下: ?...在python2.7中当要将字符串encode为utf8,我们需要确保之前的字符串的编码方式为unicode,所以当字符串编码不为unicode时,我们需要使用decode方法,而在使用decode方法时我们需要指明原有字符串的编码格式...所以在根据上面的情况,在python2中出现编码互转的情况,可以参考下图: ?...而在Python3中完全没有这样的顾虑,那是因为默认python3中全部的字符串就是unicode可以直接使用encode方法。 ?

    1.1K60
    领券