# coding: UTF-8
如果您的编辑器设置为使用正确的编码保存文件,您可以使用
或者,您也可以将字符编码为仅 ASCII 的转义序列。例如,转义序列é
为\u00E9
:
FRENCH_MONTHS = [u'NotAMonth', u'Janvier', u'F\u00E9vrier', ...]
这不太可能被配置不当的编辑器搞砸,但可以实现完全相同的效果。
更好的是,您可以使用该calendar
模块并回避整个问题(基于此答案):
import calendar
def get_month_names(locale):
with calendar.TimeEncoding(locale) as encoding:
months = list(calendar.month_name)
# Could do this to match original values:
# months = [x.title() for x in months]
if encoding is not None:
months = [x.decode(encoding) for x in months]
months[0] = u"NotAMonth"
return months
FRENCH_MONTHS = get_month_names("fr_FR.UTF-8")
编辑:这与这个问题相同- 你的 é 用 编码latin 1
,但你的 Python 源文件编码是 UTF-8(在 Python 2 中明确设置,或者因为它是 Python 3 中的默认值):
>>> print "\xe9".decode("latin1")
é
>>> print "\xe9".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data
使用上述替代解决方案之一的另一个很好的理由!