python - 为什么在python中通过字符串声明unicode?

标签 python encoding utf-8

我还在学习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/

相关文章:

python - 使函数不等待其内部的其他函数

python - grpc python在客户端和服务器上支持多线程

python - Flask {{ request.script_root|tojson|safe }} 不返回值

python - 使用 unicode 字符 u201c

PHP 导出带有 BOM 的 CSV UTF-8 不起作用

google-app-engine - GAE 数据存储 : can't get UTF-8 to work as default encoding

python - 将 Python 浮点值增加最小的可能量

python - Base64 解码图像的 Rails API ASCII 转换错误

linux - 如何为PostgreSQL数据库设置编码?

Java:使用默认邮件客户端发送电子邮件:如何换行?