【问题标题】:Eliminate accents in python消除python中的重音符号
【发布时间】:2015-04-28 00:16:42
【问题描述】:

我有这个功能可以去除单词中的重音

def remove_accents(word):
    return ''.join(x for x in unicodedata.normalize('NFKD', word) if x in string.ascii_letters)

但是当我运行它时,它会显示一个错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 3: ordinal not in range(128)

位置3的字符是:ó

【问题讨论】:

  • 适用于我,如果输入是 unicode 字符串:remove_accents(u"foóbar") 正确返回 u"foobar"
  • 你认为这可能是因为我在使用 Mac 工作?
  • 不,我也在使用 Mac。
  • 当我输入一个带重音的字符时,它会显示:输入中不支持的字符
  • 你是如何输入这些字符的?

标签: python unicode diacritics


【解决方案1】:

如果你的输入是一个 unicode 字符串,它可以工作:

>>> remove_accents(u"foóbar")
u'foobar'

如果不是,那就不是。我没有收到您描述的错误,而是收到 TypeError,并且只有在尝试将其转换为 unicode 时才会收到 UnicodeDecodeError

>>> remove_accents(unicode("foóbar"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)

如果这是您的问题,即您有 Python 2 str 对象作为输入,您可以先将其解码为 utf-8 来解决它:

>>> remove_accents("foóbar".decode("utf-8"))
u'foobar'

【讨论】:

  • 是的,这正是我的问题,我尝试将其解码为 utf-8,但它显示此错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 3: unexpected end of data
  • 只是一个疯狂的猜测,但尝试"cp1252" 而不是"utf-8"
猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2012-01-01
相关资源
最近更新 更多