Python 将此 utf8 字符串转换为 latin1

Python convert this utf8 string to latin1

我有这个 UTF-8 字符串:

s = "Naděždaüäö"

我想将其转换为 UTF-8 字符串,它可以是 "latin-1" 中的 encoded 而不会引发异常。我想通过用最接近的表示形式(比如 ascii 左右)替换在 latin-1 中找不到的每个字符来做到这一点。

由于“ěž”不在 latin-1 中,我希望将它们转换为 "ez",而“üäö”在 latin-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