我有一个UTF-8输入文件,它经常包含非法的字符序列。因为它看起来只是那个特定的序列,所以我想用我的Python脚本中的正确等价替换它。
这应该很简单,我想:
value = value.replace('\xE2\x80\x3f', u'”'.encode('utf8'))
但是,脚本没有运行 - 相反,它会抛出一个错误:
SyntaxError: Non-ASCII character '\xe2' in file script.py on line 10, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
是否有编码允许我将任何字符编码为字符串文字,实质上是告诉Python关闭并让我使用我想要的任何无效字符?
(注意:我使用的是Python 2.7)
答案 0 :(得分:4)
# -*- coding:utf-8 -*-
value = "What an amazing string \xE2\x80\x3f !!"
value = value.replace('\xE2\x80\x3f', u'”'.encode('utf8'))
print value
这是有效的原因是因为Python2解释器将输入脚本文件读取为ASCII文件,并且不解码UTF-8字符。因为您在文件中写了一个显式的UTF-8字符(即”
),您需要告诉解释器他必须将输入脚本文件读取为UTF-8文件,而不是ASCII文件。
另请参阅有关源代码编码的PEP0263