python源文件编码的含义_【原创】Python 源文件编码解读
以下内容源于对 PEP-0263 的翻译和解读,同时给出了一些网上网友的说法。
======== 我是分割线 ========
PEP 0263 -- Defining Python Source Code Encodings
【摘要】
给出声明 Python 源文件编码的语法。该编码信息后续会被 Python 解析器用于解析源文件。
这种方式增强了对源文件中 Unicode 编码字的处理。
【问题】
Python 2.1 时代,Unicode 字符只能利用 Latin-1 字符进行“Unicode 转义”的方式来表示(也就是说当时只支持 Latin-1 字符编码,所以 Unicode 字符编码只能使用 Latin-1 字符来进行转义表示)。这对广大亚洲人民是很坑爹的。
【解决方案】
通过在 Python 脚本文件的头部增加 显式的、可按文件随时改变的 特殊注释,来声明编码方式。
【编码定义】
Python 默认使用 ASCII 编码。
若要自定义 Python 源码的编码方式,需要在脚本文件的第一或者第二行的位置上添加如下定义:
1.
# coding=
2.
#!/usr/bin/python
# -*- coding: -*-
3.
#!/usr/bin/python
# vim: set fileencoding= :
在前两种方式中,实际上是通过 coding[:=]\s*([-\w.]+) 这个正则表达式来进行匹配。
为了支持 Windows 平台上的应用,会在生成的 Unicode 文件的头部添加 Unicode BOM 标识,其中带有 UTF-8 标识 '\xef\xbb\xbf' 的文件会被当做具有 UTF-8 编码的文件(此时在 Python 脚本的头部没有那行编码特殊注释也没问题) 。
如果出现源文件同时使用了 UTF-8 BOM 标识和文件头部的特殊注释的情况,那么在表明编码的特殊注释中只能使用 'utf-8' 这个字串,其他情况会报错。
【举例】
1. Python 解析器说明 + Emacs 风格的文件编码注释
#!/usr/bin/python
# -*- coding: latin-1 -*-
import os, sys
...
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import os, sys
...
#!/usr/bin/python
# -*- coding: ascii -*-
import os, sys
...
2. 无 Python 解析器说明 + 普通明文描述
# This Python file uses the following encoding: utf-8
import os, sys
...
3. Python 解析器说明 + 非 Emacs 风格的文件编码注释
#!/usr/local/bin/python
# coding: latin-1
import os, sys
...
4. 无编码注释(Python 解析器默认为 ASCII)
#!/usr/local/bin/python
import os, sys
...
5. 错误的编码注释方式
a. 无 coding: 前缀
#!/usr/local/bin/python
# latin-1
import os, sys
...
b. 编码注释不在第一或第二行
#!/usr/local/bin/python
#
# -*- coding: latin-1 -*-
import os, sys
...
c. 使用不支持的编码
#!/usr/local/bin/python
# -*- coding: utf-42 -*-
import os, sys
...
=========== 我是分割线 ============
小实验截图:
输出中文。
报错。
添加编码。
正常输出。
IDE默认的编码设置。
各种转码输出。
输出的结果。
补充说明:
cp936即 code page 936(代码页936)是以GBK(国标扩展字符集)为基础的编码。GB2312(国标字符集)只是GBK的一部分。
GB2312只支持常用的汉字,而且是简体字。GBK支持繁体字和生僻字。
python源文件编码的含义_【原创】Python 源文件编码解读相关推荐
- python判断邮件发送成功_(原创)python发送邮件
这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件. 首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smt ...
- python selenium定位元素方法_[原创] python selenium 元素定位方法封装
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返 ...
- python 文件编码的识别_【python】python编码方式,chardet编码识别库
环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...
- python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...
基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...
- python交互式和文件式_使用Python创建和自动化交互式仪表盘
python交互式和文件式 In this tutorial, I will be creating an automated, interactive dashboard of Texas COVI ...
- python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...
2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...
- python科学计数法转换_对比Python学习Go 基本数据结构
公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...
- python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...
<python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...
- python怎么读取sav格式_利用Python读取外部数据文件
利用Python读取外部数据文件 [color=rgb(0, 0, 0) !important]刘顺祥 [color=rgb(0, 0, 0) !important]摘要: 不论是数据分析,数据可视化 ...
最新文章
- 编程自动化,未来机器人将超越人类?
- react hooks使用_如何使用Hooks将React类组件转换为功能组件
- 这可能是十年来最酷的神经科学发现
- 宿州市人力资源和社会保障局数据保护及容灾系统方案公示
- 【c++】30.为什么可以通过指针或引用实现多态,而不可以通过对象呢?
- An error occurred. connect() failed (111: Connection refused) while connecting to upstream
- boost::describe模块和boost::json混合编程的测试程序
- 用我对HTML的点点理解来做个简单的百度首页
- 二进制_简单了解二进制
- 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE
- Android入门(13)| Android权限 与 内容提供器
- android 贝塞尔曲线 波浪线,Android 贝塞尔曲线实现水纹波动效果
- MyBatis学习总结(23)——Mybatis打印Sql语句配置
- Linux PS 命令详解
- 【软件工程导论】软件工程学概述
- java redis学习记录
- html读取在线文件,javascript中如何读取文件?
- 《软技能—代码之外的生存指南》读书笔记之二:自我营销
- 事件抽取(event extraction)
- Beyond compare 全红问题解决
热门文章
- Linux 信号之mysleep
- php注入教程,php注入点构造代码实例详解
- 第五季2:STA模式USB-WIFI网卡移植与测试
- 采用存储复制方式同步数据,实现数据库安全升级
- 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器...
- 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
- Java的几个同步辅助类
- 在Delphi中使用indy SMTP发送gmail邮件[转]
- PHP上传文件大小限制的问题(转)
- Asp.net 中 Eval 调用后台函数的写法