python3设置编码_PYTHON3编码再探究
***[原文请戳](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编码再探究相关推荐
- python3设置编码格式_python3编码调整
python2默认的编码是ascii,python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式.import sys reload(sys) s ...
- python3 x默认使用的编码_Python3编码问题(Python2请忽略)
一.python程序编辑界面和运行界面通常都是默认unicode编码字符串的,编辑界面则是ascii编码的,也就是程序语句是用ascii编码的.但最困扰编程小白的不在这里,请看二. 二.python的 ...
- python3 x版本的默认编码_python3.x设置默认编码(sys.stdout.encoding和sys.defaultencoding)...
查了一会资料得出的结论是如果你用的是python3.x,那么就最好别去设置sys.defaultencoding或者sys.stdout.encoding 记住在需要编码的时候用encode,解码的时 ...
- python3中默认的字符编码和文件编码_python3 unicod,utf-8,gbk的编码和解码中文显示问题...
目的: 清楚了解为什么在python3不同的编码,解码,windows,linux操作系统下,字符是否能够正确显示. 前提: 了解不同编码用不同的二级制编码和长度来表示字符. 在python3中,各种 ...
- python3编码声明_python3编码问题汇总
这两天写了个监测网页的爬虫,作用是跟踪一个网页的变化,但运行了一晚出现了一个问题....希望大家不吝赐教! 我用的是python3,错误在对html response的decode时抛出,代码原样为: ...
- python3编码问题_python3编码问题
Python3默认编码是unicode 而Python2是ASCII码 Windows环境默认是gbk编码 Python3 自动把文件编码转为unicode,Python2并不会自动的把文件编码转为u ...
- python3 x默认使用的编码_python3默认使用什么编码
python3默认编码为unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节码,字节码通过解码成为字符串 encode:str --> bytes(推 ...
- 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )
文章目录 安卓直播推流专栏博客总结 一. x264 编码器参数设置引入 二. 获取 x264 编码器参数 三. 设置 x264 编码器编码规格 四. 设置 x264 编码器编码图像数据格式 五. 设置 ...
- 1、代码中设置编码、编辑器中设置Python的编码
1Python中文编码 1.1代码中设置编码 Python中默认的编码格式是ASCII格式,在没有修改编码格式时无法正确打印汉字,所以在读取中文的时候会报错. 解决办法为只要在文件开头加入 # -- ...
- python3默认的代码编码是什么-Python3 到底什么是字符编码
我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, U ...
最新文章
- 实战 | keras-yolov3 + Kalman-Filter 进行人体多目标追踪(含代码)
- OpenCV+OpenGL 双目立体视觉三维重建
- Linux之chattr命令详解
- MFC EDIT控件的使用记录
- ACCESS在哪输入SQL语句
- Cocos2d开发1:Xcode与TexturePacker的集成
- 滤波器开发之三:基于算数平均的阶进平滑滤波器
- bzoj1232[Usaco2008Nov]安慰奶牛cheer*
- php数据全部输出,我的php 分页输出数据 全部输出没有按我设定的输出 也就是本来该一页输出5条的 现在全部输出完了...
- 使用XLocalizer进行ASP.NET Core本地化
- 【编程练习】复习一下树的遍历
- [CMake] find_package 指定路径
- POJ 3669 简单BFS
- 一天学习一点之如何安装nodejs
- 语音信号处理(赵力)作业答案第8章——语音合成
- 基本函数依赖和候选键_给定一组字母表示的函数依赖集,怎样确定候选键?
- 做一个有意境的女人难上加难
- 重庆云阳2021云中高考成绩查询,2021年云阳县高考状元是谁及其成绩名单
- LeetCode/LintCode 题解丨一周爆刷双指针:K个空的位置
- 回声消除中的LMS和NLMS算法与MATLAB实现