2

我正在使用 web 应用程序从我玩的游戏结果中检索数据。由于我是巴西人,而且我的语言中有一些带有拉丁重音符号的字符,因此我检索到的大部分数据都无法使用。喜欢:

卡洛斯·洛佩兹 = Carlos Lã³Pez

我搜索了互联网,发现 ftfy 是一个很好的修复损坏文本的工具。无论如何,我不太了解 unicode、ascii 和其他东西,所以我使用了 ftfy,并收到了我已经有的相同错误作为输出。

In[15]: ftfy.fix_text('Carlos Lã³Pez')
Out[15]: 'Carlos Lã³Pez'

ftfy.fix_encoding('Carlos Lã³Pez')
Out[16]: 'Carlos Lã³Pez'

ftfy.fix_text('Carlos Lã³Pez')
Out[17]: 'Carlos Lã³Pez'

print(ftfy.fix_text('Carlos Lã³Pez'))
Carlos Lã³Pez

print(ftfy.fix_encoding('Carlos Lã³Pez'))
Carlos Lã³Pez

ftfy.explain_unicode('Carlos Lã³Pez')
U+0043  C       [Lu] LATIN CAPITAL LETTER C
U+0061  a       [Ll] LATIN SMALL LETTER A
U+0072  r       [Ll] LATIN SMALL LETTER R
U+006C  l       [Ll] LATIN SMALL LETTER L
U+006F  o       [Ll] LATIN SMALL LETTER O
U+0073  s       [Ll] LATIN SMALL LETTER S
U+0020          [Zs] SPACE
U+004C  L       [Lu] LATIN CAPITAL LETTER L
U+00E3  ã       [Ll] LATIN SMALL LETTER A WITH TILDE
U+00B3  ³       [No] SUPERSCRIPT THREE
U+0050  P       [Lu] LATIN CAPITAL LETTER P
U+0065  e       [Ll] LATIN SMALL LETTER E
U+007A  z       [Ll] LATIN SMALL LETTER Z

ftfy.explain_unicode(unidecode('Carlos Lã³Pez'))
U+0043  C       [Lu] LATIN CAPITAL LETTER C
U+0061  a       [Ll] LATIN SMALL LETTER A
U+0072  r       [Ll] LATIN SMALL LETTER R
U+006C  l       [Ll] LATIN SMALL LETTER L
U+006F  o       [Ll] LATIN SMALL LETTER O
U+0073  s       [Ll] LATIN SMALL LETTER S
U+0020          [Zs] SPACE
U+004C  L       [Lu] LATIN CAPITAL LETTER L
U+0061  a       [Ll] LATIN SMALL LETTER A
U+0033  3       [Nd] DIGIT THREE
U+0050  P       [Lu] LATIN CAPITAL LETTER P
U+0065  e       [Ll] LATIN SMALL LETTER E
U+007A  z       [Ll] LATIN SMALL LETTER Z

print(ftfy.fix_encoding(unidecode('Carlos Lã³Pez')))
Carlos La3Pez

print(ftfy.fix_text(unidecode('Carlos Lã³Pez')))
Carlos La3Pez

我想知道是否有任何软件包可以解决这种错误,或者您是否可以给我任何线索,为什么 Carlos López 变成了 Carlos Lã³Pez。我很感激。

4

1 回答 1

3

哇,这很难 :) 你的字符串编码错误,字符大小写也错误

s = 'Carlos Lã³Pez'
s.upper().encode('cp1252').decode().title()
#'Carlos López'

此代码适用于 Python3,但不适用于 Python2。

于 2018-01-19T03:11:12.100 回答