我还在学习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
)。这只会影响解释器如何读取文件中的字符。
一般来说,无论编码是什么,将高 unicode 字符嵌入到文件中可能不是最好的主意;您可以使用字符串 unicode 转义,它适用于任何一种编码。
当你声明一个前面有u
的字符串,比如u'This is a string'
,它告诉Python编译器字符串是 Unicode,而不是字节。这主要由解释器透明地处理;最明显的区别是您现在可以在字符串中嵌入 unicode 字符(即 u'\u2665'
现在是合法的)。您可以使用 from __future__ import unicode_literals
将其设为默认值。
这仅适用于 Python 2;在 Python 3 中默认是 Unicode,你需要在前面指定一个 b
(比如 b'这些是字节'
,来声明一个字节序列)。
关于python - 为什么在python中通过字符串声明unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170211/