Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中解码错误的转义字符_Python_Python 3.x_String_Character Encoding - Fatal编程技术网

在python中解码错误的转义字符

在python中解码错误的转义字符,python,python-3.x,string,character-encoding,Python,Python 3.x,String,Character Encoding,所以我有一个有很多名字的数据库。这些名字有不好的字符。例如,记录中的名称是JoséFlorés 我想把它清理干净以得到JoséFlorés 我尝试了以下方法 name = " José Florés " print(name.encode('iso-8859-1',errors='ignore').decode('utf8',errors='backslashreplace') 输出将姓氏发送到“JoséFlor\\xe9s” 解决这个问题的最好办法是什么?名称可以有任何类型

所以我有一个有很多名字的数据库。这些名字有不好的字符。例如,记录中的名称是
JoséFlorés
我想把它清理干净以得到JoséFlorés

我尝试了以下方法

name = "    José     Florés "
print(name.encode('iso-8859-1',errors='ignore').decode('utf8',errors='backslashreplace')
输出将姓氏发送到
“JoséFlor\\xe9s”


解决这个问题的最好办法是什么?名称可以有任何类型的unicode或十六进制转义序列。

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

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

>>> s
'Florés'
>>> print(s)
Florés
与Python2.x中的相同字符串s不同,在本例中,s已经是Unicode字符串,Python3.x中的所有字符串都自动使用Unicode。明显的区别是,在我们实例化它之后,它没有改变

您可以在这里找到相同的

是一个python库,它使用名为
fix\u 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\u text
方法可以标准化名称,这是解决问题的另一种方法。

看起来您的on值中有两种不同的编码。我想最好的办法是把它们分成一个单词,试着用两种编码来解码(处理一个可能的异常并尝试另一个),然后把单词重新组合在一起。我考虑过了。但是,我应该如何在这样一个名称数据库中进行同样的操作,它可以有任何类型的编码。在我看来,这更像是一个搜索和替换问题,而不是编码/解码问题。您有一个用于编码的有效字符串,而不是预期的字符串。确定有问题的字符序列和良好的替换,然后使用正则表达式进行搜索和替换。但是要小心——这不是一个确切的类比,但是当那些问题序列偶尔被证明是完全有效和正确的时候,“那永远不会发生”的态度可能是危险的,因此替换是错误的。自动搜索可能更好,但手动修复。这真的是您的数据吗?在同一个字符串中看到两种不同的编码是非常罕见的。这实际上是我拥有的众多记录之一。这是如何回答这个问题的?谢谢,再见!。为许多测试用例工作
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"