以下内容源于对 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 源文件编码解读相关推荐

  1. python判断邮件发送成功_(原创)python发送邮件

    这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件. 首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smt ...

  2. python selenium定位元素方法_[原创] python selenium 元素定位方法封装

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返 ...

  3. python 文件编码的识别_【python】python编码方式,chardet编码识别库

    环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...

  4. python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...

    基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...

  5. python交互式和文件式_使用Python创建和自动化交互式仪表盘

    python交互式和文件式 In this tutorial, I will be creating an automated, interactive dashboard of Texas COVI ...

  6. python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  7. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  8. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

  9. python怎么读取sav格式_利用Python读取外部数据文件

    利用Python读取外部数据文件 [color=rgb(0, 0, 0) !important]刘顺祥 [color=rgb(0, 0, 0) !important]摘要: 不论是数据分析,数据可视化 ...

最新文章

  1. 编程自动化,未来机器人将超越人类?
  2. react hooks使用_如何使用Hooks将React类组件转换为功能组件
  3. 这可能是十年来最酷的神经科学发现
  4. 宿州市人力资源和社会保障局数据保护及容灾系统方案公示
  5. 【c++】30.为什么可以通过指针或引用实现多态,而不可以通过对象呢?
  6. An error occurred. connect() failed (111: Connection refused) while connecting to upstream
  7. boost::describe模块和boost::json混合编程的测试程序
  8. 用我对HTML的点点理解来做个简单的百度首页
  9. 二进制_简单了解二进制
  10. 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE
  11. Android入门(13)| Android权限 与 内容提供器
  12. android 贝塞尔曲线 波浪线,Android 贝塞尔曲线实现水纹波动效果
  13. MyBatis学习总结(23)——Mybatis打印Sql语句配置
  14. Linux PS 命令详解
  15. 【软件工程导论】软件工程学概述
  16. java redis学习记录
  17. html读取在线文件,javascript中如何读取文件?
  18. 《软技能—代码之外的生存指南》读书笔记之二:自我营销
  19. 事件抽取(event extraction)
  20. Beyond compare 全红问题解决

热门文章

  1. Linux 信号之mysleep
  2. php注入教程,php注入点构造代码实例详解
  3. 第五季2:STA模式USB-WIFI网卡移植与测试
  4. 采用存储复制方式同步数据,实现数据库安全升级
  5. 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器...
  6. 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
  7. Java的几个同步辅助类
  8. 在Delphi中使用indy SMTP发送gmail邮件[转]
  9. PHP上传文件大小限制的问题(转)
  10. Asp.net 中 Eval 调用后台函数的写法