用英文字母替换 python 中的语言特定字符
Replace language specific characters in python with English letters
Python3中有什么方法可以用英文字母替换通用语言的特定字符吗?
例如,我有函数 get_city(IP)
,即 returns 城市名称与给定 IP 相关联。它连接到外部数据库,所以我不能改变它的编码方式,我只是从数据库中获取价值。
我想做类似的事情:
city = "České Budějovice"
city = clear_name(city)
print(city) #should return "Ceske Budejovice"
这里我使用的是捷克语,但总的来说它应该适用于任何非亚洲语言。
尝试 unidecode
:
# coding=utf-8
from unidecode import unidecode
city = "České Budějovice"
print(unidecode(city))
根据需要打印 Ceske Budejovice
(假设您的 post 有错字)。
注意:如果您使用 Python 2.x,您需要在将字符串传递给 unidecode
之前对其进行解码,例如unidecode(city.decode('utf-8'))
在这种情况下使用 unicodedata
模块。
要获得所需的结果,您应该使用 unicodedata.normalize() 和
unicodedata.combining() 函数:
import unicodedata
city = "České Budějovice"
normalized = unicodedata.normalize('NFD', city)
new_city = u"".join([c for c in normalized if not unicodedata.combining(c)])
print(new_city) # Ceske Budejovice
NFD
是四种 Unicode 规范化形式之一
上面的 Asongtoring 几乎是正确的 - 但在 Python 3 中它有点简单,正如 Pavlo Fesenko 在解决方案的评论中提到的那样。这里的解决方案在Python 3
from unidecode import unidecode
city = "České Budějovice"
print(unidecode(city))
Python3中有什么方法可以用英文字母替换通用语言的特定字符吗?
例如,我有函数 get_city(IP)
,即 returns 城市名称与给定 IP 相关联。它连接到外部数据库,所以我不能改变它的编码方式,我只是从数据库中获取价值。
我想做类似的事情:
city = "České Budějovice"
city = clear_name(city)
print(city) #should return "Ceske Budejovice"
这里我使用的是捷克语,但总的来说它应该适用于任何非亚洲语言。
尝试 unidecode
:
# coding=utf-8
from unidecode import unidecode
city = "České Budějovice"
print(unidecode(city))
根据需要打印 Ceske Budejovice
(假设您的 post 有错字)。
注意:如果您使用 Python 2.x,您需要在将字符串传递给 unidecode
之前对其进行解码,例如unidecode(city.decode('utf-8'))
在这种情况下使用 unicodedata
模块。
要获得所需的结果,您应该使用 unicodedata.normalize() 和
unicodedata.combining() 函数:
import unicodedata
city = "České Budějovice"
normalized = unicodedata.normalize('NFD', city)
new_city = u"".join([c for c in normalized if not unicodedata.combining(c)])
print(new_city) # Ceske Budejovice
NFD
是四种 Unicode 规范化形式之一
上面的 Asongtoring 几乎是正确的 - 但在 Python 3 中它有点简单,正如 Pavlo Fesenko 在解决方案的评论中提到的那样。这里的解决方案在Python 3
from unidecode import unidecode
city = "České Budějovice"
print(unidecode(city))