解码python中的错误转义符

时间:2019-01-03 18:35:09

标签: python python-3.x string character-encoding

所以我有一个名称很多的数据库。名称中包含错误的字符。例如,记录中的名称为#cuadricula { width: 600px; height: 900px; display: grid; grid-template-columns: auto auto auto; background: #c51162; border: 1px solid #FFF; overflow: hidden; background-image: url('http://images.fastcompany.com/upload/Simple.jpg'); background-size: cover; } .item_cuadricula_1 { background: rgba(253, 85, 143, 0.60); } @media only screen and (max-width: 650px) { #cuadricula { grid-template-columns: 1fr 1fr; width: 100%; } 我想清理它以获得José Florés

我尝试了以下

José     Florés

输出将姓氏弄乱到name = " José Florés " print(name.encode('iso-8859-1',errors='ignore').decode('utf8',errors='backslashreplace')

解决此问题的最佳方法是什么?名称可以具有任何类型的unicode或十六进制转义序列。

2 个答案:

答案 0 :(得分:2)

ftfy是一个python库,它使用名为fix_text的函数修复以不同方式破坏的unicode文本。

from ftfy import fix_text

def convert_iso_name_to_string(name):
    result = []

    for word in name.split():
        result.append(fix_text(word))
    return ' '.join(result)

name = "José Florés"
assert convert_iso_name_to_string(name) == "José Florés"

使用fix_text方法可以对名称进行标准化,这是解决问题的另一种方法。

答案 1 :(得分:-1)

我们将从包含非ASCII字符(即“ü”或“ umlaut-u”)的示例字符串开始:

s = 'Florés'

现在,如果我们引用并打印该字符串,它会给我们基本上相同的结果:

>>> s
'Florés'
>>> print(s)
Florés

与Python 2.x中的相同字符串s相比,在这种情况下s已经是Unicode字符串,并且Python 3.x中的所有字符串都自动为Unicode。可见的区别是s在实例化后并没有改变

您可以在这里Encoding and Decoding Strings

找到相同的内容