我仍在学习python,我对此表示怀疑:
在python 2.6.x中,我通常像这样在文件头中声明编码(如在PEP 0263中)
# -*- coding: utf-8 -*-
之后,我的字符串照常编写:
a = "A normal string without declared Unicode"
但是每次我看到python项目代码时,都不会在标头中声明编码。而是在每个这样的字符串处声明它:
a = u"A string with declared Unicode"
有什么不同?目的是什么?我知道Python 2.6.x默认情况下会设置ASCII编码,但是它可以被标头声明覆盖,那么每个字符串声明有什么意义呢?
附录: 似乎我将文件编码和字符串编码混为一谈了。感谢您的解释:)
正如其他人所提到的,这是两件事。
指定时# -*- coding: utf-8 -*-,就是告诉Python保存的源文件是utf-8。Python 2的默认值为ASCII(Python 3的默认值为utf-8)。这只会影响解释器读取文件中字符的方式。
utf-8
通常,不管编码是什么,将高unicode字符嵌入文件中可能都不是最好的主意。您可以使用字符串unicode转义,这两种编码都可以使用。
当您在字符串u前面声明一个字符串(例如)时u'This is a string',它会告诉Python编译器该字符串是Unicode,而不是字节。这大部分由解释器透明地处理。最明显的区别是您现在可以在字符串中嵌入unicode字符(即u'\u2665'现在合法)。您可以使用from __future__ import unicode_literals使其成为默认值。
u
u'This is a string'
u'\u2665'
from __future__ import unicode_literals
这仅适用于Python 2;在Python 3中,默认值为Unicode,您需要b在前面指定a (例如b'These are bytes',以声明字节序列)。
b
b'These are bytes'