按照 https://www.python.org/dev/peps/pep-0263/ 给出了编码定义,格式应该如下
such as:
# coding=<encoding name>
or (using formats recognized by popular editors)
#!/usr/bin/python
# -*- coding: <encoding name> -*-
or
#!/usr/bin/python
# vim: set fileencoding=<encoding name>
我有几个疑问
# coding=utf-8
和 # coding=UTF-8
有什么区别
源码使用 utf-8 情况下,应该使用 without BOM 么,为什么?
这种是错误的么,生效么
# -*- encoding: UTF-8 -*-
1
wellsc 2016-09-18 10:51:57 +08:00 via Android
You are so 闲。
|
2
julyclyde 2016-09-18 14:27:49 +08:00
# 没区别
# 因为 BOM 影响 hashbang 的判读 # 看起来是正确的啊 |
3
shalk OP @julyclyde encoding 和 coding 看上去不一样啊。 PEP 中也没提到有 encoding:这种写法
|
4
zhuangzhuang1988 2016-09-18 16:25:46 +08:00
看 python 源码就知道了..
|
5
bombless 2016-09-18 16:37:01 +08:00 1
参考了下 https://github.com/python-git/python/blob/715a6e5035bb21ac49382772076ec4c630d6e960/Lib/idlelib/IOBinding.py
1 肯定是没区别, 2 的话代码里面有说, 2.3 才开始支持, 3 的话可以,代码里面用到 |
6
glasslion 2016-09-18 16:47:35 +08:00 1
@shalk
实测 1 , 3 里的写法都不会报错, 但这和 CPython 的实现有关, 不应该使用 PEP 263 里没提到的格式 2. 应该使用不带 BOM 的。 BOM 本来就是针对 utf-16 实现一个十分丑陋的方案。 utf-8 里使用 BOM 没有任何意义。 |
7
Kisesy 2016-09-18 17:29:56 +08:00 1
utf-8 和 UTF-8 没区别,甚至写成 utf8 和 u8 都行
|
9
fugees 2016-09-18 17:51:27 +08:00
蛋痛的厉害吧
我一直用 # encoding: utf-8 |
10
jiangbingo 2016-09-18 17:59:25 +08:00
对了 ,写脚本文件一定要将 -*- encoding:utf-8-*- 写在代码开始的第一行。不然会报编码错~
|
12
shalk OP @bombless 感谢分享
另外,我在源码中没有找到关于大小写 区分的 解释; 我看到 `def coding_spec` 解析源码的开头两行,返回编码的 name ;之后用 return unicode(chars, enc) 解码成 unicode 。 我自己试了一下。 ``` >>> a="啊啊" >>> unicode(a,"utf-8") u'\u554a\u554a' >>> unicode(a,"UTF-8") u'\u554a\u554a' ``` 另外又看了一下 https://docs.python.org/2/library/codecs.html#standard-encodings 也没有找到关于大小写的解释.. |
14
shalk OP @Kisesy 果然是这样。
还是可以是 utf ,或者下面这几个。 ``` # utf_8 codec 'u8' : 'utf_8', 'utf' : 'utf_8', 'utf8' : 'utf_8', 'utf8_ucs2' : 'utf_8', 'utf8_ucs4' : 'utf_8', ``` |