在字符串中替换为unicode Django和python3.7

在字符串中替换为unicode Django和python3.7,django,python-3.x,unicode,Django,Python 3.x,Unicode,我在Django有一个charfield: class Rue(models.Model): created = models.DateTimeField(null=True, blank=True, editable=False) modified = models.DateTimeField(null=True, blank=True) name = models.CharField(blank=True, null=True, max_length=200) 这是

我在Django有一个charfield:

class Rue(models.Model):
    created = models.DateTimeField(null=True, blank=True, editable=False)
    modified = models.DateTimeField(null=True, blank=True)
    name = models.CharField(blank=True, null=True, max_length=200)
这是我的剧本:

print(rue.name)
rue.name = rue.name.replace("Ã%Coles","Ecoles")
print(rue.name)
rue.save()
我想更正导入文件的错误,并清理数据库。 我想用Ecoles取代Coles

但结果是:

Rue Des Ã%Coles
Rue Des Ã%Coles

怎么清洗这个?我想用Ecoles替换Ã%Coles这看起来像是坏编码,您看到的%C后面不是一个百分比,而是一个可能被进一步更改的单个控制字符

在我的系统上:

>>> print('Écoles'.encode('utf-8').decode('iso-8859-1'))
à coles
要解决这一问题,您可能需要执行以下操作:

broken_e = 'É'.encode('utf-8').decode('iso-8859-1')
rue.name = rue.name.replace(broken_e, 'E')
rue.save()

键入printreprue.name。在前后分别编码“latin-1”。这可能会澄清字符串中的确切内容。如果无意中对其进行了拉丁-1解码而不是utf-8解码(这似乎是一个可能的原因),我会希望输出“Rue Des\xc3\x89coles”而不是您所说的“Rue Des\xc3%Coles”。html文档是否使用拉丁-1而不是utf-8?检查是否有元标记如果您的数据以不正确的编码保存在数据库中,此库可以帮助您再次清理它。如果在其中添加repr,则非打印字符和无效代码点将显示为unicode转义码printrepr'Écoles'。编码为'utf-8'。解码为'iso-8859-1'=>'Ã\x89coles'。\x89代码点在unicode中未使用,在latin-1/iso-8859-1中也未使用。