Python3.X-文本编码问题
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()操作返回的是strrb:也即 binary mode,read()操作返回的是bytes
(2)解释一下open中三个参数的作用。
open(f_name,'r',encoding="utf-8")
第一个位置参数f_name指的是打开的文件的名字。
第二个位置参数‘r’指的是用读模式打开。
第三个位置参数encoding='utf-8',指的是读取文件的编码格式为:utf-8
Python3.X-文本编码问题的更多相关文章
- python3中的编码
python2字符串编码存在的问题: 使用 ASCII 码作为默认编码方式,对中文处理不友好 把字符串分为 unicode 和 str 两种类型,将unicode作为唯一内码,误导开发者 python ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)
python3 解释器默认编码为Unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节串,字节码通过解码成为字符串. encode:str-->byte ...
- [2015.02.02]文本编码转换专家 v2.6
软件名称:文本编码转换专家最新版本:v2.6操作系统:XP/2003/Win7/Win2008软件介绍:文本编码转换专家,界面简洁易用,功能强大实用.自动识别文件编码,有效转换成目标编码.真正的多线程 ...
- node.js整理 03文件操作-遍历目录和文本编码
遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...
- mac 文本编辑器 文本编码Unicode utf-8 不适用的问题
在mac上使用默认的文本编辑器打开下载的xx.txt文件,如果文本是gbk的编码可能会出现 文本编码Unicode utf-8 不适用的打开错误,如下图 解决方式: 文本编辑---偏好设置-----打 ...
- Mac下用命令行直接批量转换文本编码到UTF8
由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ...
- python3中的编码与解码(超好理解)
编码和解码是针对数据而言的,数据能干什么呢?无非就是用来显示,储存和传输的: 储存和传输数据当然是希望数据越小越好,所以发明了utf-8这种数据编码显示:它智能将英文用一个字节表示,欧洲的字符用两个字 ...
- 011_如何decode url及图片转为base64文本编码总结
一.咱们经常会遇到浏览器给encode后的url,如何转换成咱们都能识别的url呢?很简单,talk is easy,Please show me your code,如下所示: (1)英文decod ...
随机推荐
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步
1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...
- java 将long类型的数值转无符号数
由于JAVA中基本数据类型均为有符号数,而且最大数据类型long为8字节假如long为负数时,最高位为1,转为无符号数时会超出long的取值范围,所以转换规则如下: 方法: public static ...
- python 初识
一.Python介绍 Python简介 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...
- 去掉iframe白色背景方法
在iframe内添加如下代码 style="display:none" onload="this.style.display = 'block';" 先让它不显 ...
- asyncio标准库1 Hello World
利用asyncio的event loop,编写和调度协程 coroutine [,kəuru:'ti:n] n. 协程 Simple coroutine(调用1个协程) import asyncio ...
- sql server 数据库还原后sa连接不上原因
手动创建了一个同名数据库,然后还原以前或者别人的备份,还原虽然成功了,但是在VS中连接不上,原因可能是: 数据库的所有者中没有添加sa,方法即在数据库名上右击,然后选择文件,在所有者中添加上sa,应该 ...
- Android(java)学习笔记45:深入分析Java ClassLoader原理
1. 前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块. 当 ...
- 广义mandelbrot集,使用python的matplotlib绘制,支持放大缩小
迭代公式的指数,使用的1+5j,这是个复数.所以是广义mandelbrot集,大家能够自行改动指数,得到其它图形.各种库安装不全的,自行想办法,能够在这个站点找到差点儿全部的python库 http: ...
- 动态规划(DP),最长递增子序列(LIS)
题目链接:http://poj.org/problem?id=2533 解题报告: 状态转移方程: dp[i]表示以a[i]为结尾的LIS长度 状态转移方程: dp[0]=1; dp[i]=max(d ...
- js实现div滚动条在页面刷新 滚动条位置固定
思想:1.通过div的onscroll事件记录滚动条的scrollTop值,设置到document.cookie 2.页面加载时再读取document.cookie的值,设置给div的scrollTo ...