python3.x Day3 文件编码
文件编码:
知识点不多,但及其重要,python2和python3处理机制还有不同点,需要注意。
首先:
编码、数据类型,完全不同的概念。
文件编码:可以遵循开发环境、可以自行设定。
变量值编码:python2、我不清楚,貌似可以设定吧sys.setdefaultcode()方法设定?
python3、变量值默认的编码就是unicode
简述一下,编码从utf-8到gbk过程:
utf-8 --> unicode --> gbk
gbk转为utf-8
gbk --> unicode --> utf-8
也就是说传说中的万国码,就是厉害。通过它可以转任何。
python2中:
#字符转编码:
#python2 原编码(utf8) --> 目标编码(gbk),需要 str.decode("utf-8").encode("gbk"),
#第一步的decode方法用于转码为unicode,参数为我当前是什么编码的(utf8),
#第二步的encode方法用于从unicode到目标编码(gbk),参数为目标编码(gbk)
#decode目标是unicode,encode源是unicode,不能跨过unicode直接用encode转为目标编码,这是字符转码的标准流程。 import sys
print(sys.getdefaultencoding()) #打印python环境的默认编码
s="你好"
s_to_gbk=s.decode("utf-8").encode("gbk") #decode过程就变成unicode再encode到目标
print(s_to_gbk,type(s_to_gbk))
python3中:
存储为unicode编码,可以直接进行转码encode()方法,但是数据类型会被变为byte,不重要,编码反正转了。
可以通过decode()方法转为字符串,但此时仅改变了数据类型,编码没有发生变化,就是encode()时的编码。
编码、数据类型 完全不同的概念
#python3 过程一样,先到转到unicode,再到目标编码,
#但是,python3,底层存储时的值就是unicode编码的,所以字符串变量不再提供decode方法
#由此,明确两个问题
#1、python3,直接str.encode("目标编码"),只是变成了byte数据类型,不过编码就是目标编码。
#2、python3,既然编码过程无变化,如果有需求,
# str.encode("utf-8").decode("utf-8").encode("gbk")
#这是为了明确转码过程,实际应用不大,因为unicode编码是万国码,需要对接本地码程序需求的话,直接转就行了
import sys
print(sys.getdefaultencoding()) #打印python环境的默认编码
s="你哈"
print(s.encode("gbk")) #unicode直接转gbk的输出结果
print(s.encode("utf-8")) #unicode直接转utf-8的输出结果(byte类型,编码正确)
print(s.encode("utf-8").decode("utf-8").encode("gbk")) #unicode直接转utf-8,再转为unicode,再转为gbk,(还是byte类型,编码正确)
# 经过完整流程后,与直接转gbk结果相同,这个就是为了证明流程、结果的正确
#python3中,只有encode()方法以后,数据类型都是byte,编码是指定编码,无参就是默认编码 可以再转回字符串的。。。
# decode()方法就行了,参数要根据实际参数传,不传可以,除非可以确定这个需要转回字符串的比byte类型的数据,就是默认编码,不然就异常。
s_to_gbk=s.encode("gbk").decode("gbk") #decode不写gbk,会报异常说,gbk不能转到响应目标编码,
print(s_to_gbk,type(s_to_gbk)) #证明转回了字符串类型,并且是gbk编码的
#python3,在encode的时候除了转了编码,同时转了数据类型变为byte
python3.x Day3 文件编码的更多相关文章
- python3.x Day3 文件操作
文件操作:操作文件实际是4步骤1.描述文件是哪个 2.打开文件 3.操作文件 4.关闭文件 1.打开文件使用open方法,代码举例: data=open("wait_you",en ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- python文件编码及执行
兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码. 当Python解释器读取源代码时,为了让它按UTF-8编 ...
- Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数
文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...
- 分享一个批量修改文件编码的python脚本
分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...
- 用python3读csv文件出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
1.python3读取csv文件时报如下图所示的错误 2.分析原因:读取的csv文件不是 UTF8 编码的,而IDE工具默认采用 UTF8 解码.解决方法是修改源文件的解码方式. 3.使用nodepa ...
- Excel文件转plist文件出现的文件编码问题
今天在测试时遇到了需要将大量整理好的Excel数据转换为plist文件的情况.百度了一下教程,发现虽然别人也遇到过类似的情况,但是有些讲的还是不够细致.所以做如下整理. 百度到的内容中有使用Mes ...
- 微信小程序小技巧系列《二》show内容展示,上传文件编码问题
作者:gou-tian 来自:github show内容展示 尝试用微信小程序的template组件实现.同时,尝试页面间转跳时传参,在目标页面引入模板文件实现 写的更少,做的更多 篇幅有限详细代码此 ...
- 文件编码、charset、sublime编辑器支持GBK等问题
问题一:如何让sublime3支持GBK 首先打开package control ,然后键入install package进入,搜索ConvertToUTF8安装成功后 打开要查看的GBK文件,点击菜 ...
随机推荐
- Android Studio:Gradle project refresh failed. 解决方法
事件 换了个电脑,Android Studio拷过来,重新配置后,打开已有的项目,报错: Gradle project refresh failed. Connection timed out: co ...
- Mac下搭建react native开发环境
安装必需软件 Homebrew Homebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件. /usr/bin/ruby -e "$(curl -fsSL htt ...
- oracle 存储过程调用 执行
oracle 存储过程调用 博客分类: 数据库相关 oracle存储过程 2011年02月11日 星期五 14:47 SQL中调用存储过程语句: call procedure_name(); 调用 ...
- Apache Ignite——集合分布式缓存、计算、存储的分布式框架
Apache Ignite内存数据组织平台是一个高性能.集成化.混合式的企业级分布式架构解决方案,核心价值在于可以帮助我们实现分布式架构透明化,开发人员根本不知道分布式技术的存在,可以使分布式缓存.计 ...
- python库学习笔记——re库:正则表达式入门(一)
什么是正则表达式? 我们在处理文本文件的时候,会按照某种规则查找某些特定的字符串.比方我们希望从一堆电子档案中找到人员的电话号码整理成通讯录.于是,我们可以利用特定字符串的规律编程获得我们想要的信息. ...
- 【USACO 2008FEB】 旅馆
[题目链接] 点击打开链接 [算法] 线段树 对于一个节点,记录它从左端点延伸的最多的空房间的个数,从右端点延伸的最多的空房间个数,和该区间最多的连续 空房间个数 [代码] #include<b ...
- WPF获取原始控件样式
要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...
- the odb manual
http://www.codesynthesis.com/products/odb/doc/manual.xhtml#18.4
- sqlserver2000连接失败,不存在或拒绝访问
一 看ping 服务器IP能否ping通. 这个实际上是看和远程sql server 2000服务器的物理连接是否存在.如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务 ...
- C#实现的鼠标钩子
http://www.oschina.net/code/snippet_104607_45975 使用 Socket 获得网页内容,可以捕获错误页的内容 HttpClient http://www.o ...