Python将此utf8字符串转换为拉丁文1

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

我有这个UTF-8字符串:

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