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文件,点击菜 ...
随机推荐
- 10.04 FZSZ模拟Day1 总结
今天轮到FZSZ出题了,这可是连续两年捧杯NOI的学校了…… 可想而知今天题难度有多大……不过似乎还要庆幸出题的是一位叫Anzhe Wang 的大神而不是fjzzq? T1.permutation 期 ...
- RDA Kconfig介绍 ***
安装显示库: sudo apt-get install libncurses5-dev libncursesw5-dev 执行相关文件: 1.radisson.Kconfig 2.gen_radiss ...
- C# 判断两个矩形是否相交
源代码 public bool JudgeRectangleIntersect(double RecAleftX, double RecAleftY, double RecArightX, doubl ...
- ROS-URDF仿真
前言:URDF (标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.首先做一个带有四个轮子的机器人底座. 1.1 新建urdf文件 在chapter4_t ...
- POJ 2187 凸包+旋转卡壳
思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说 凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...
- 51nod 1018 排序
1018 排序 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N ...
- 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...
- leetcode523 Continuous Subarray Sum
思路: 令sum[p]表示p位置的前缀和.如果sum[i] % k == sum[j] % k (j - i > 1),则存在子段(i, j]的和能够整除k. 实现: class Solutio ...
- 如何删除sublime目录
左侧栏的sublime目录一直删不掉,删除列直接变成了灰色. 今天才发现应该选择文件夹右击选择工程——从工程中删除文件夹. 这个设计真的很醉,删除这么常用的键还放进了第二层……
- clipboard.min.js 复制表格内容
<script type="text/javascript" src="js/clipboard.min.js"></script> & ...