У меня есть эта строка UTF-8:
s = "Naděždaüäö"
Который я хотел бы преобразовать в строку UTF-8, которая может быть encoded
в "latin-1" без исключения. Я хотел бы сделать это, заменив каждый символ, который не может быть найден в латинице-1, его ближайшим представлением, скажем, в ascii или около того.
Поскольку "ěž" не в латинице-1, я бы хотел, чтобы они были преобразованы в "ez", а "üäö" в латыни-1, поэтому они не должны быть преобразованы в "uao", а остаются как "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äöü"
Спасибо за вашу помощь.