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
我有这个 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