文件编码:

知识点不多,但及其重要,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 文件编码的更多相关文章

  1. python3.x Day3 文件操作

    文件操作:操作文件实际是4步骤1.描述文件是哪个 2.打开文件 3.操作文件 4.关闭文件 1.打开文件使用open方法,代码举例: data=open("wait_you",en ...

  2. Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法

    知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...

  3. python文件编码及执行

    兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码. 当Python解释器读取源代码时,为了让它按UTF-8编 ...

  4. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  5. 分享一个批量修改文件编码的python脚本

    分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...

  6. 用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 ...

  7. Excel文件转plist文件出现的文件编码问题

    今天在测试时遇到了需要将大量整理好的Excel数据转换为plist文件的情况.百度了一下教程,发现虽然别人也遇到过类似的情况,但是有些讲的还是不够细致.所以做如下整理.   百度到的内容中有使用Mes ...

  8. 微信小程序小技巧系列《二》show内容展示,上传文件编码问题

    作者:gou-tian 来自:github show内容展示 尝试用微信小程序的template组件实现.同时,尝试页面间转跳时传参,在目标页面引入模板文件实现 写的更少,做的更多 篇幅有限详细代码此 ...

  9. 文件编码、charset、sublime编辑器支持GBK等问题

    问题一:如何让sublime3支持GBK 首先打开package control ,然后键入install package进入,搜索ConvertToUTF8安装成功后 打开要查看的GBK文件,点击菜 ...

随机推荐

  1. 10.04 FZSZ模拟Day1 总结

    今天轮到FZSZ出题了,这可是连续两年捧杯NOI的学校了…… 可想而知今天题难度有多大……不过似乎还要庆幸出题的是一位叫Anzhe Wang 的大神而不是fjzzq? T1.permutation 期 ...

  2. RDA Kconfig介绍 ***

    安装显示库: sudo apt-get install libncurses5-dev libncursesw5-dev 执行相关文件: 1.radisson.Kconfig 2.gen_radiss ...

  3. C# 判断两个矩形是否相交

    源代码 public bool JudgeRectangleIntersect(double RecAleftX, double RecAleftY, double RecArightX, doubl ...

  4. ROS-URDF仿真

    前言:URDF (标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.首先做一个带有四个轮子的机器人底座. 1.1 新建urdf文件 在chapter4_t ...

  5. POJ 2187 凸包+旋转卡壳

    思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说   凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...

  6. 51nod 1018 排序

    1018 排序 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N  ...

  7. 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。

    在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...

  8. leetcode523 Continuous Subarray Sum

    思路: 令sum[p]表示p位置的前缀和.如果sum[i] % k == sum[j] % k (j - i > 1),则存在子段(i, j]的和能够整除k. 实现: class Solutio ...

  9. 如何删除sublime目录

    左侧栏的sublime目录一直删不掉,删除列直接变成了灰色. 今天才发现应该选择文件夹右击选择工程——从工程中删除文件夹. 这个设计真的很醉,删除这么常用的键还放进了第二层……

  10. clipboard.min.js 复制表格内容

    <script type="text/javascript" src="js/clipboard.min.js"></script> & ...