Im使用库unidecode将重音符号字符串转换为ascii表示的符号。在
>>> accented_string = u'Málaga'
# accented_string is of type 'unicode'
>>> import unidecode
>>> unidecode.unidecode(accented_string)
>>> Malaga
但问题是我正在从一个文件中读取字符串如何将其发送到“unidecode”库。在
^{pr2}$
我不知道该怎么办?如果我给它编码,那就是给我错误的编码。在
Tags:
我有一个解决方法,它太简单了,只需将读取的字符串解码回unicode字符串,然后将其传递到“unidecode”库。在
使用unicodedata.normalize:
您可以使用4种规范化形式:“NFC”、“NFKC”、“NFD”和“NFKD”。在
下面是在上面链接的文档中使用它的详细信息:
Unicode标准基于规范等价和兼容性等价的定义,定义了Unicode字符串的各种规范化形式。在Unicode中,几个字符可以用不同的方式表示。例如,字符U+00C7(带加符的拉丁文大写字母C)也可以表示为序列U+0043(拉丁文大写字母C)U+0327(组合加符)。在
对于每个字符,有两种范式:范式C和范式D。范式D(NFD)也被称为正则分解,它将每个字符转换成其分解形式。标准格式C(NFC)首先应用规范分解,然后再次组合预组合字符。在
除了这两种形式之外,还有两种基于相容性等价性的额外规范形式。在Unicode中,支持某些通常与其他字符统一的字符。例如,U+2160(罗马数字一)与U+0049(拉丁文大写字母I)实际上是一回事。但是,为了与现有字符集(例如gb2312)兼容,Unicode支持它。在
标准格式KD(NFKD)将应用兼容性分解,即用它们的等价物替换所有兼容字符。范式KC(NFKC)首先应用相容性分解,然后应用正则组合。在
即使两个unicode字符串被规范化,在人类读者看来是一样的,如果一个有组合字符,而另一个没有,它们可能无法进行相等的比较。在
我们仍然不知道您的pandas列的类型,因此下面是Python 2的两个版本:
如果
strings
已经是一个Unicode字符串序列(type(name)
是unicode
):如果
strings
的元素是常规Python 2str
(type(name)
是str
):如果字符串存储在UTF-8编码中,这将起作用。否则,您必须提供适当的编码,例如
"latin-1"
等在python3中,第一个版本应该可以工作;在到达这一点之前,即第一次从磁盘读入数据时,必须先解决编码问题。在
相关问题 更多 >
编程相关推荐