Python将此utf8字符串转换为拉丁文1
我有这个UTF-8字符串:Python将此utf8字符串转换为拉丁文1,python,unicode,python-module-unicodedata,Python,Unicode,Python Module Unicodedata,我有这个UTF-8字符串: s = "Naděždaüäö" 我想将其转换为UTF-8字符串,该字符串可以用“latin-1”进行编码,而不会引发异常。我想用最接近的表示法替换拉丁语-1中找不到的每个字符,比如说ascii码 既然“ěž”不是拉丁语-1,我希望它们转换成“ez”,而“üäö”是拉丁语-1,所以它们不应该转换成“uao”,而应该保留为“üäö” 我的第一次尝试是这样的: import unicodedata def convert(s): return unicoded
s = "Naděždaüäö"
我想将其转换为UTF-8字符串,该字符串可以用“latin-1”进行编码
,而不会引发异常。我想用最接近的表示法替换拉丁语-1中找不到的每个字符,比如说ascii码
既然“ěž”不是拉丁语-1,我希望它们转换成“ez”,而“üäö”是拉丁语-1,所以它们不应该转换成“uao”,而应该保留为“üäö”
我的第一次尝试是这样的:
import unicodedata
def convert(s):
return unicodedata.normalize(
'NFKD', s
).encode(
'latin-1', 'ignore'
).decode('latin-1')
这至少让我走了这么远:
s = "Naděžda"
print(convert(s)) # --> "Nadezda"
但后来我意识到,这也将转换“äöü”,如图所示:
s = "Naděždaäöü"
print(convert(s)) # --> "Nadezdaaou"
或者,我尝试:
def convert2(s):
return unicodedata.normalize(
'NFKC', s
).encode(
'latin-1', 'ignore'
).decode('latin-1')
这导致:
s = "Naděždaäöü"
print(convert(s)) # --> "Naddaäöü"
谢谢你的帮助。如果你一个字符一个字符地做,它会工作(尽管它不是超级干净的)
def convert(s):
r=''
for c in s:
try:
c.encode('latin-1')
except UnicodeEncodeError:
c = unicodedata.normalize('NFKD', c).encode('latin-1', 'ignore').decode('latin-1')
r += c
return r