1.请说明python2与python3的默认编码是什么?

python的默认编码是ASCII码,python3的默认编码是utf-8

2.为什么会出现中文乱码?能列举出现乱码的情况有哪几种么?

编码的方式和解码的方式不一致,就会出现乱码现象。

比如:(1)文本内容是以gbk编码的,但是解码的方式却是utf-8,就会乱码

(2)文本内容是以ASCII进行编码的,那就不支持中文,如果往文本中添加中文,就会显示乱码.

解决方法:用chardet获取编码格式  

import chardet

str = "xxxxx"
str_type = chardet.detect(str)
code = str_type['encoding']

code即为str的编码格式。但有些人反映该方法得到的编码格式不准确,速度也慢。本人亲测,速度确实一般,但是目前还没遇到不准确的情况。大家可以斟酌使用,我这里只是提供一个思路,如果谁那里有更好的方式,可以告知小弟,不吝赐教。

3.如何进行编码转换?

运用 encode(编码)和decode(解码)

decode是解码,从二进制编码格式到unicode编码格式,解码的格式需要以最开始编码的方式一致,否则出现乱码

encode是编码,从unicode格式到二级制编码格式(可以是gbk,utf-8等等)

 # -*- coding:utf-8 -*-  

 str = "你好" #py3默认编码是utf-8
print('unicode:', type(str),str)
str = bytes(str, encoding='utf-8') # 先编码,转换成bytes二进制类型
print(type(str), str)
str = str.decode("utf-8") #再解码,若这个地方写gbk,就会出现乱码错误
print('用utf-8编码成bytes类型,再解码成unicode:',type(str), str)
str=str.encode("gbk")
str=str.decode('gbk')
print('用gbk编码成unicode,再解码:', type(str), str)

4. # -*- coding:utf-8 -*-  这句话的作用是什么?

文本编码方式默认为utf-8

5.解释py2 bytes vs py3 bytes的区别

(1)Python 3 所有的 strings 均是 unicode 类型,如果要转换成bytes类型,则需要进行编码声明,比如:

str ⇒ bytes:bytes(s, encoding='utf8')
bytes ⇒ str:s.decode('utf-8')

在python2.x 中是不区分bytes和str类型的,str的所有操作bytes都支持。但是在python3中bytes和str中是区分开的。

python2 中

>>> s = "abcdefg" 
>>> b = s.encode()    #或者使用下面的方式

>>> b = b"abcdefg"
>>> type(b)
<type 'str'>

python3中                  #str和bytes是严格区分的

>>> s = "abcdefg"
>>> type(s)
<class 'str'>
>>> b = b"abcdefg"
>>> type(b)
<class 'bytes'>

str是文本系列,bytes是字节系列

文本是有编码的(UTF-8,GBK,GB2312等)

字节没有编码

文本的编码指的是字符如何使用字节来表示组织方式,linux下默认都使用UTF-8

 (2)bytes与str之间的转换-------编码

bytes由str通过encode方法转化得到的,str也可以通过bytes 通过decode方法转化得到

通过b前缀可以定义bytes

GBK 是双字节,UTF-8 灵活编码,1字节,2字节,3字节,4字节都有,最大支持6字节长度,中文大多数是3字节

>>> S = "我是中国人"
>>> S
'我是中国人'
>>> b = S.encode()               #进行编码为bytes
>>> b
b'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> b.decode()                      #进行解码为字符串
'我是中国人'
>>>

str被编码成什么格式的,就需要使用什么格式的编码进行解码

>>> S = "我是中国人"
>>> S
'我是中国人'
>>> b = S.encode('GBK')
>>> b
b'\xce\xd2\xca\xc7\xd6\xd0\xb9\xfa\xc8\xcb'
>>> b.decode('GBK')
'我是中国人'

(3)bytes的操作

bytes具有string类型的所有操作,bytes可以通过str encode转化,也可以通过前缀b定义

>>> b = b'abc'
>>> b
b'abc'
>>> b.decode()
'abc'

>>> len(('我是中国人').encode())      #求bytes的长度
15
>>> b
b'abc'
>>> b.hex()                                       #转化为16进制
'616263'

>>> bin(616263)                                 #转化为2进制
'0b10010110011101000111'

6.文件处理

(1)读取文件是,r和rb的区别是什么?

对于 Python 3 环境:

  • r:Python 将会按照编码格式进行解析,read() 操作返回的是str
  • rb:也即 binary mode,read()操作返回的是bytes

(2)解释一下open中三个参数的作用。
  open(f_name,'r',encoding="utf-8")

第一个位置参数f_name指的是打开的文件的名字。

第二个位置参数‘r’指的是用读模式打开。

第三个位置参数encoding='utf-8',指的是读取文件的编码格式为:utf-8

Python3.X-文本编码问题的更多相关文章

  1. python3中的编码

    python2字符串编码存在的问题: 使用 ASCII 码作为默认编码方式,对中文处理不友好 把字符串分为 unicode 和 str 两种类型,将unicode作为唯一内码,误导开发者 python ...

  2. 转 python3中SQLLIT编码与解码之Unicode与bytes

    #########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...

  3. python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)

    python3 解释器默认编码为Unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节串,字节码通过解码成为字符串. encode:str-->byte ...

  4. [2015.02.02]文本编码转换专家 v2.6

    软件名称:文本编码转换专家最新版本:v2.6操作系统:XP/2003/Win7/Win2008软件介绍:文本编码转换专家,界面简洁易用,功能强大实用.自动识别文件编码,有效转换成目标编码.真正的多线程 ...

  5. node.js整理 03文件操作-遍历目录和文本编码

    遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...

  6. mac 文本编辑器 文本编码Unicode utf-8 不适用的问题

    在mac上使用默认的文本编辑器打开下载的xx.txt文件,如果文本是gbk的编码可能会出现 文本编码Unicode utf-8 不适用的打开错误,如下图 解决方式: 文本编辑---偏好设置-----打 ...

  7. Mac下用命令行直接批量转换文本编码到UTF8

    由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ...

  8. python3中的编码与解码(超好理解)

    编码和解码是针对数据而言的,数据能干什么呢?无非就是用来显示,储存和传输的: 储存和传输数据当然是希望数据越小越好,所以发明了utf-8这种数据编码显示:它智能将英文用一个字节表示,欧洲的字符用两个字 ...

  9. 011_如何decode url及图片转为base64文本编码总结

    一.咱们经常会遇到浏览器给encode后的url,如何转换成咱们都能识别的url呢?很简单,talk is easy,Please show me your code,如下所示: (1)英文decod ...

随机推荐

  1. Selenium2学习(四)-- xpath定位

    前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...

  2. 在同一网关下ping不通其他电脑

    最近在做数据库相关的程序,所以想先用ping试下和主机连没连着,但发现虽然两台电脑在同一网关下,但却互相ping不通,后来才发现,原来是防火墙在作怪. Omg!感慨一下!默认的情况下,保守的windo ...

  3. 我对git 、github的初印象

    前言:都说,要在IT这行混得风生水起,就必须不断接触新事物.学习新东西.然而,这个重要的点也是难做的点.当老师要我们用博客交作业的时候,我就觉得挺新鲜了,在知道很多牛逼的程序猿还会用到git和gith ...

  4. 为什么使用中间件下载时总是收到警告消息Object is in status Wait

    在使用中间件从ERP下载对象时,正常情况下应该看到如下提示消息: 然而有时遇到的是黄色的警告消息:Object is in status Wait. 如何自己排错呢?在函数SMOF0_INIT_DNL ...

  5. php多进程写入文件

    测试一 $begin = time(); for ($i=0; $i<10000; $i++) { $fp = fopen("tmp", 'r+'); fseek($fp, ...

  6. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  7. 【洛谷P1538】迎春舞会之数字舞蹈

    迎春舞会之数字舞蹈 题目链接 一道奇怪的模拟题, 先将样例输出复制下来,观察观察 -- -- -- -- -- -- -- -- ① | | | | | | | | | | | | | | ② | | ...

  8. c语言描述的二分插入排序法

    #include<stdio.h> #include<stdlib.h> //二分插入排序法 void BinsertSort(int a[],int n){ int low, ...

  9. 23.POI导出

    POI导出 XSSFWorkbook 对应Excel2007版本及以上 HSSFWorkbook 对应Excel2003版本 还要注意一点,不要用Swagger-ui测试导出的表格,这样的表格文件都是 ...

  10. JavaWeb项目中各个文件夹的作用

    /WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/ 包含了站点所有用的 class 文件,包括 se ...