如何处理Python文件中的注释和硬编码字符串中的特殊字符?
这个问题主要讨论以下两种情况:
你想把一个包含特殊字符的字符串放到一个变量里:
special_char_string = "äöüáèô"
你想在注释中允许使用特殊字符。
# 这是一个包含特殊字符的注释:äöà 等等。
目前我这样处理:
# -*- encoding: utf-8 -*-
special_char_string = "äöüáèô".decode('utf8')
# This a comment with special characters in it: äöà etc.
这样做没问题。
这样做是推荐的方法吗?还是有更好的解决方案呢?
2 个回答
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字面量,这样会稍微快一点。