我有一个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äöü"
感谢您的帮助。