python—将字符串转换为unicode字符串
Im使用库unidecode将重音字符串转换为ascii表示的字符串python—将字符串转换为unicode字符串,python,python-2.7,unicode,utf,Python,Python 2.7,Unicode,Utf,Im使用库unidecode将重音字符串转换为ascii表示的字符串 >>> accented_string = u'Málaga' # accented_string is of type 'unicode' >>> import unidecode >>> unidecode.unidecode(accented_string) >>> Malaga 但问题是我正在从文件中读取字符串,如何将其发送到“unidecode
>>> accented_string = u'Málaga'
# accented_string is of type 'unicode'
>>> import unidecode
>>> unidecode.unidecode(accented_string)
>>> Malaga
但问题是我正在从文件中读取字符串,如何将其发送到“unidecode”库
for name in strings:
print unidecode.unidecode(u+name) #?????
>>> accented_string = 'Málaga'
>>> accented_string_u = accented_string.decode('utf-8')
>>> import unidecode
>>> unidecode.unidecode(accented_string_u)
>>> Malaga
我的脑袋绕不过去了?如果我对它进行了编码,那只会给我错误的编码。使用:
您可以使用4种规范化形式:“NFC”、“NFKC”、“NFD”和“NFKD”
以下是在上面链接的文档中使用它的详细信息:
Unicode标准基于规范等价和兼容性等价的定义,定义了Unicode字符串的各种规范化形式。在Unicode中,几个字符可以用不同的方式表示。例如,字符U+00C7(带CEDILLA的拉丁文大写字母C)也可以表示为序列U+0043(拉丁文大写字母C)U+0327(组合CEDILLA)
对于每个字符,有两种范式:范式C和范式D。范式D(NFD)也称为规范分解,并将每个字符转换为其分解形式。范式C(NFC)首先应用规范分解,然后再次组合预组合字符
除了这两种形式之外,还有两种基于兼容性等价性的额外范式。在Unicode中,支持某些字符,这些字符通常与其他字符统一。例如,U+2160(罗马数字1)与U+0049(拉丁文大写字母I)实际上是相同的。但是,Unicode支持它与现有字符集(例如gb2312)兼容
范式KD(NFKD)将应用兼容性分解,即用其等价物替换所有兼容性字符。标准形式KC(NFKC)首先应用兼容性分解,然后是规范组合
即使两个unicode字符串被规范化,并且在人类读者看来是相同的,但如果一个有组合字符,而另一个没有,它们的比较可能不相等。使用:
您可以使用4种规范化形式:“NFC”、“NFKC”、“NFD”和“NFKD”
以下是在上面链接的文档中使用它的详细信息:
Unicode标准基于规范等价和兼容性等价的定义,定义了Unicode字符串的各种规范化形式。在Unicode中,几个字符可以用不同的方式表示。例如,字符U+00C7(带CEDILLA的拉丁文大写字母C)也可以表示为序列U+0043(拉丁文大写字母C)U+0327(组合CEDILLA)
对于每个字符,有两种范式:范式C和范式D。范式D(NFD)也称为规范分解,并将每个字符转换为其分解形式。范式C(NFC)首先应用规范分解,然后再次组合预组合字符
除了这两种形式之外,还有两种基于兼容性等价性的额外范式。在Unicode中,支持某些字符,这些字符通常与其他字符统一。例如,U+2160(罗马数字1)与U+0049(拉丁文大写字母I)实际上是相同的。但是,Unicode支持它与现有字符集(例如gb2312)兼容
范式KD(NFKD)将应用兼容性分解,即用其等价物替换所有兼容性字符。标准形式KC(NFKC)首先应用兼容性分解,然后是规范组合
即使两个unicode字符串被规范化,并且在人类读者看来是相同的,如果其中一个有组合字符,而另一个没有,它们也可能不相等。我们仍然不知道pandas列的类型,因此Python 2有两个版本:
- 如果
已经是一个Unicode字符串序列(strings
是type(name)
):Unicode
- 如果
的元素是常规Python 2字符串
(str
是type(name)
):str
“latin-1”
等
在Python3中,第一个版本应该可以工作;在达到这一点之前,即首次从磁盘读取数据时,您必须解决编码问题。我们仍然不知道pandas列的类型,因此Python 2有两个版本:
- 如果
已经是一个Unicode字符串序列(strings
是type(name)
):Unicode
- 如果
的元素是常规Python 2字符串
(str
是type(name)
):str
“latin-1”
等
在Python3中,第一个版本应该可以工作;在达到这一点之前,即当您第一次从磁盘读入数据时,您必须解决编码问题。我有一个非常简单的解决方法,只需将读取的字符串解码回unicode字符串,然后将其传递到“unidecode”库
for name in strings:
print unidecode.unidecode(u+name) #?????
>>> accented_string = 'Málaga'
>>> accented_string_u = accented_string.decode('utf-8')
>>> import unidecode
>>> unidecode.unidecode(accented_string_u)
>>> Malaga
我有一项工作太简单了,只需将读取的字符串解码回unicode字符串,然后将其传递到“unidecode”库
for name in strings:
print unidecode.unidecode(u+name) #?????
>>> accented_string = 'Málaga'
>>> accented_string_u = accented_string.decode('utf-8')
>>> import unidecode
>>> unidecode.unidecode(accented_string_u)
>>> Malaga
如何从csv文件中读取
字符串
?然后在每个字符串值上循环,每个值的类型为“string”。请在问题中也包含该代码。忽略示例中的“u”;这只是Python2符号,告诉你它是unicode。如果您的字符串还不是unicode,您需要知道它们的编码,并将它们从str
转换为unicode