如何处理Python文件中的注释和硬编码字符串中的特殊字符?

0 投票
2 回答
8982 浏览
提问于 2025-04-16 20:04

这个问题主要讨论以下两种情况:

  1. 你想把一个包含特殊字符的字符串放到一个变量里:

    special_char_string = "äöüáèô"

  2. 你想在注释中允许使用特殊字符。

    # 这是一个包含特殊字符的注释:äöà 等等。

目前我这样处理:

# -*- encoding: utf-8 -*-
special_char_string = "äöüáèô".decode('utf8')
# This a comment with special characters in it: äöà etc.

这样做没问题。

这样做是推荐的方法吗?还是有更好的解决方案呢?

2 个回答

2

是的,这种方式是推荐的,适用于Python 2.x版本,具体可以参考PEP 0263。在Python 3.x及更高版本中,默认的编码方式是UTF-8,而不是ASCII,所以在这些版本中就不需要这样做了。详细信息可以查看PEP 3120

4

Python会在文件的第一行或第二行查找类似emacs或vim的编码说明。

更准确地说,第一行或第二行必须符合这个规则:"coding[:=]\s*([-\w.]+)"。这个规则的第一个部分会被当作编码名称来理解。如果Python不知道这个编码,就会在编译时出现错误。

来源:PEP 263

(如果有BOM,Python也会把源文件当作UTF-8来处理。)

我建议你使用这个方法,而不是.decode('utf8')

# -*- encoding: utf-8 -*-
special_char_string = u"äöüáèô"

无论如何,special_char_string将会包含一个unicode对象,而不再是str对象。正如你所看到的,它们在意义上是等价的:

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True

反过来说也是一样:

>>> u"äöüáèô".encode('utf8')
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'
>>> "äöüáèô"
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'

不过有一个技术上的区别:如果你使用u"something",这会告诉解析器这是一个unicode字面量,这样会稍微快一点。

撰写回答