***[原文请戳](https://github.com/kerwin6182828/Learning-note/blob/master/Python/py3%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.md)***

> 本文大概需要10分钟看完

## 1 看一段简单代码

要求:Linux编辑器,python3版本

```

vim test1.py

```

```

# test1.py内容:

import sys, locale

s = "王佳"

print(s)

print(sys.getdefaultencoding())

print(locale.getdefaultlocale())

with open("utf8_1.txt","w",encoding = "utf-8") as f:

f.write(s)

with open("gbk_1.txt","w",encoding = "gbk") as f:

f.write(s)

```

sys.getdefaultencoding():python编译器的编码

locale.getdefaultlocale():本地操作系统的编码

上述代码返回结果:

```

王佳

utf-8 # python编译器的编码

('en_US', 'UTF-8') # 本地操作系统的编码

```

再来看一下生成的两个文件中的内容,我们使用notepad打开,并且将这两个的文件编码都设置成utf-8

utf8_1.txt:

![utf8_1.txt](http://img.blog.itpub.net/blog/2019/06/25/f0b4a079860bd001.png?x-oss-process=style/bb)

gbk_1.txt:

![gbk_1.txt](http://img.blog.itpub.net/blog/2019/06/25/50789e6e07d78dee.png?x-oss-process=style/bb)

分析如下:

```

#1 对于utf8_1.txt来说

# 第一步:由于linux的编辑器是utf8,所以:

'王佳'.encode('utf8') = \xe7\x8e\x8b\xe4\xbd\xb3 (写入文件时)

# 第二步:由于没有指定py文件的coding,所以python解释器将默认按照系统编码utf8进行解码

\xe7\x8e\x8b\xe4\xbd\xb3.decode('utf8') = '王佳'

# 第三步:open时指定了encoding=utf8去编码写入到文件中

'王佳'.encode('utf8')= \xe7\x8e\x8b\xe4\xbd\xb3

# 第四步:在notepadd中指定了utf8去解码

\xe7\x8e\x8b\xe4\xbd\xb3.decode('utf8')='王佳'

#2 对于gbk_1.txt来说

# 第一步:由于linux的编辑器是utf8,所以:

'王佳'.encode('utf8') = \xe7\x8e\x8b\xe4\xbd\xb3 (写入文件时)

# 第二步:由于没有指定py文件的coding,所以python解释器将默认按照系统编码utf8进行解码

\xe7\x8e\x8b\xe4\xbd\xb3.decode('utf8') = '王佳'

# 第三步:open时指定了encoding=gbk去编码写入到文件中

'王佳'.encode('gbk')= \xcd\xf5\xbc\xd1

# 第四步:在notepadd中指定了utf8去解码

\xcd\xf5\xbc\xd1.decode('utf8')=这样写会报错,因为utf8编码,没有这几个。所以notepad就显示其gbk的字节码。

```

## 再看一段代码

```

# test2.py

#coding=gbk

import sys, locale

s = "王佳"

print(s)

print(sys.getdefaultencoding())

print(locale.getdefaultlocale())

with open("utf8_2.txt","w",encoding = "utf-8") as f:

f.write(s)

with open("gbk_2.txt","w",encoding = "gbk") as f:

f.write(s)

```

此时,再看一下文件中的结果:

utf8_2.txt:

![](http://img.blog.itpub.net/blog/2019/06/25/e145394ae5af47f2.png?x-oss-process=style/bb)

```

# 出现 鐜嬩匠 的原因分析

# 第一步:由于linux的编辑器是utf8,所以:

'王佳'.encode('utf8') = \xe7\x8e\x8b\xe4\xbd\xb3 (写入文件时)

# 第二步:由于指定py文件的coding=gbk,所以python解释器将默认按照系统编码gbk进行解码读取

\xe7\x8e\x8b\xe4\xbd\xb3.decode('gbk') = '鐜嬩匠'

# 第三步:open时指定了encoding=utf8去编码写入到文件中

'鐜嬩匠'.encode('utf8')= ??\xe5\x8c\xa0

# 第四步:在notepadd中指定了utf8去解码

??\xe5\x8c\xa0.decode('utf8')='鐜嬩匠'

```

gbk_2.txt:

![](http://img.blog.itpub.net/blog/2019/06/25/fa912d6cb3e35780.png?x-oss-process=style/bb)

```

# 正常显示的原因

# 第一步:由于linux的编辑器是utf8,所以:

'王佳'.encode('utf8') = \xe7\x8e\x8b\xe4\xbd\xb3 (写入文件时)

# 第二步:由于指定py文件的coding=gbk,所以python解释器将默认按照系统编码gbk进行解码读取

\xe7\x8e\x8b\xe4\xbd\xb3.decode('gbk') = '鐜嬩匠'

# 第三步:open时指定了encoding=gbk去编码写入到文件中

'鐜嬩匠'.encode('gbk')= \xe7\x8e\x8b\xe4\xbd\xb3

# 第四步:在notepadd中指定了utf8去解码

\xe7\x8e\x8b\xe4\xbd\xb3.decode('utf8')='王佳'

```

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69904754/viewspace-2648730/,如需转载,请注明出处,否则将追究法律责任。

python3设置编码_PYTHON3编码再探究相关推荐

  1. python3设置编码格式_python3编码调整

    python2默认的编码是ascii,python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式.import sys reload(sys) s ...

  2. python3 x默认使用的编码_Python3编码问题(Python2请忽略)

    一.python程序编辑界面和运行界面通常都是默认unicode编码字符串的,编辑界面则是ascii编码的,也就是程序语句是用ascii编码的.但最困扰编程小白的不在这里,请看二. 二.python的 ...

  3. python3 x版本的默认编码_python3.x设置默认编码(sys.stdout.encoding和sys.defaultencoding)...

    查了一会资料得出的结论是如果你用的是python3.x,那么就最好别去设置sys.defaultencoding或者sys.stdout.encoding 记住在需要编码的时候用encode,解码的时 ...

  4. python3中默认的字符编码和文件编码_python3 unicod,utf-8,gbk的编码和解码中文显示问题...

    目的: 清楚了解为什么在python3不同的编码,解码,windows,linux操作系统下,字符是否能够正确显示. 前提: 了解不同编码用不同的二级制编码和长度来表示字符. 在python3中,各种 ...

  5. python3编码声明_python3编码问题汇总

    这两天写了个监测网页的爬虫,作用是跟踪一个网页的变化,但运行了一晚出现了一个问题....希望大家不吝赐教! 我用的是python3,错误在对html response的decode时抛出,代码原样为: ...

  6. python3编码问题_python3编码问题

    Python3默认编码是unicode 而Python2是ASCII码 Windows环境默认是gbk编码 Python3 自动把文件编码转为unicode,Python2并不会自动的把文件编码转为u ...

  7. python3 x默认使用的编码_python3默认使用什么编码

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

  8. 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )

    文章目录 安卓直播推流专栏博客总结 一. x264 编码器参数设置引入 二. 获取 x264 编码器参数 三. 设置 x264 编码器编码规格 四. 设置 x264 编码器编码图像数据格式 五. 设置 ...

  9. 1、代码中设置编码、编辑器中设置Python的编码

    1Python中文编码 1.1代码中设置编码 Python中默认的编码格式是ASCII格式,在没有修改编码格式时无法正确打印汉字,所以在读取中文的时候会报错. 解决办法为只要在文件开头加入 # -- ...

  10. python3默认的代码编码是什么-Python3 到底什么是字符编码

    我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, U ...

最新文章

  1. 实战 | keras-yolov3 + Kalman-Filter 进行人体多目标追踪(含代码)
  2. OpenCV+OpenGL 双目立体视觉三维重建
  3. Linux之chattr命令详解
  4. MFC EDIT控件的使用记录
  5. ACCESS在哪输入SQL语句
  6. Cocos2d开发1:Xcode与TexturePacker的集成
  7. 滤波器开发之三:基于算数平均的阶进平滑滤波器
  8. bzoj1232[Usaco2008Nov]安慰奶牛cheer*
  9. php数据全部输出,我的php 分页输出数据 全部输出没有按我设定的输出 也就是本来该一页输出5条的 现在全部输出完了...
  10. 使用XLocalizer进行ASP.NET Core本地化
  11. 【编程练习】复习一下树的遍历
  12. [CMake] find_package 指定路径
  13. POJ 3669 简单BFS
  14. 一天学习一点之如何安装nodejs
  15. 语音信号处理(赵力)作业答案第8章——语音合成
  16. 基本函数依赖和候选键_给定一组字母表示的函数依赖集,怎样确定候选键?
  17. 做一个有意境的女人难上加难
  18. 重庆云阳2021云中高考成绩查询,2021年云阳县高考状元是谁及其成绩名单
  19. LeetCode/LintCode 题解丨一周爆刷双指针:K个空的位置
  20. 回声消除中的LMS和NLMS算法与MATLAB实现

热门文章

  1. python自动搜索最佳超参数之GridSearchCV函数
  2. 使用原生JS封装Ajax
  3. MySQL何时使用索引 何时不使用索引
  4. 2、Linux多线程,线程的分离与结合
  5. 名词解释:什么是RSS? [转贴]
  6. 7个优秀的境外程序员博客
  7. Python寻找第N个默尼森数
  8. 智能优化算法:闪电连接过程算法 - 附代码
  9. Python编程——函数
  10. 网易编程题——牛牛的闹钟