如果字符串包含\xa0,Python ftfy不会修复mojibake字符

2024-10-01 17:40:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用ftfy Python包修复csv文件中的unicode错误,但在包含\xa0的行中失败

我不明白为什么会发生这种情况,应该如何正确地修复它

以下是导致问题的示例:

>>> txt = 'Linköpings Universitet, LiU'
>>> ftfy.explain_unicode(txt)
U+004C  L       [Lu] LATIN CAPITAL LETTER L
U+0069  i       [Ll] LATIN SMALL LETTER I
U+006E  n       [Ll] LATIN SMALL LETTER N
U+006B  k       [Ll] LATIN SMALL LETTER K
U+00C3  Ã       [Lu] LATIN CAPITAL LETTER A WITH TILDE
U+00B6  ¶       [Po] PILCROW SIGN
U+0070  p       [Ll] LATIN SMALL LETTER P
U+0069  i       [Ll] LATIN SMALL LETTER I
U+006E  n       [Ll] LATIN SMALL LETTER N
U+0067  g       [Ll] LATIN SMALL LETTER G
U+0073  s       [Ll] LATIN SMALL LETTER S
U+0020          [Zs] SPACE
U+0055  U       [Lu] LATIN CAPITAL LETTER U
U+006E  n       [Ll] LATIN SMALL LETTER N
U+0069  i       [Ll] LATIN SMALL LETTER I
U+0076  v       [Ll] LATIN SMALL LETTER V
U+0065  e       [Ll] LATIN SMALL LETTER E
U+0072  r       [Ll] LATIN SMALL LETTER R
U+0073  s       [Ll] LATIN SMALL LETTER S
U+0069  i       [Ll] LATIN SMALL LETTER I
U+0074  t       [Ll] LATIN SMALL LETTER T
U+0065  e       [Ll] LATIN SMALL LETTER E
U+0074  t       [Ll] LATIN SMALL LETTER T
U+002C  ,       [Po] COMMA
U+00A0  \xa0    [Zs] NO-BREAK SPACE
U+004C  L       [Lu] LATIN CAPITAL LETTER L
U+0069  i       [Ll] LATIN SMALL LETTER I
U+0055  U       [Lu] LATIN CAPITAL LETTER U
>>> print(ftfy.fix_text(txt))
Linköpings Universitet, LiU

在不包含\xa0的子字符串上进行测试可以正常工作:

>>> print(ftfy.fix_text(txt[:24]))
Linköpings Universitet,

用空格替换\xa0也可以:

>>> print(ftfy.fix_text(txt.replace('\xa0',' ')))
Linköpings Universitet, LiU

我不确定这是否是解决这个问题的正确方法,是否可以安全使用而不遗漏其他东西


Tags: txtlinkfixsmallxa0printlllu

热门问题