【问题标题】:Unicodedata.normalize() ValueError: invalid normalization formUnicodedata.normalize() ValueError: 无效的规范化形式
【发布时间】:2016-03-31 08:17:43
【问题描述】:

我正在尝试获取外语文本并输出人类可读的、文件名安全的等价物。环顾四周,似乎最好的选择是unicodedata.normalize(),但我无法让它工作。我已经尝试在这里和其他地方放置一些答案的确切代码,但它一直给我这个错误。我跑的时候只成功了一次:

unicodedata.normalize('NFD', '\u00C7')
'C\u0327'

但每隔一段时间,我都会收到错误消息。这是我尝试过的代码:

unicodedata.normalize('NFKD', u'\u2460') #error, not sure why. Look same as above.
s = 'ذهب الرجل'
unicodedata.normalize('NKFC',s) #error
unicodedata.normalize('NKFD', 'ñ') #error

具体来说,我得到的错误是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid normalization form

我不明白为什么这不起作用。所有这些都是字符串,这意味着它们在 Python 3 中是 unicode。我尝试使用.encode() 对它们进行编码,但后来normalize() 说它只需要字符串的参数,所以我知道这不可能。我很茫然,因为即使我从这里复制的代码似乎也会出错。这是怎么回事?

【问题讨论】:

    标签: python python-3.x unicode


    【解决方案1】:

    查看unicodedata.c,出现该错误的唯一方法是输入无效的form 字符串。有效值为“NFC”、“NFKC”、“NFD”和“NFKD”,但您似乎使用的是“F”和“K”互换的值:

    >>> import unicodedata
    >>>
    >>> unicodedata.normalize('NKFD', 'ñ')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid normalization form
    >>>
    >>> unicodedata.normalize('NFKD', 'ñ')
    'ñ'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2017-03-05
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      相关资源
      最近更新 更多