Python将这个UTF8字符串转换为Latin1。

3

我有一个UTF-8编码的字符串:

s = "Naděždaüäö"

我希望将其转换为UTF-8字符串,可以在“latin-1”中进行编码而不会抛出异常。我希望通过用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äöü"

感谢您的帮助。
1个回答

1
如果您逐个字符地执行它,它会起作用(尽管不是非常干净)。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接