我有这个UTF-8字符串:
s = "Naděždaüäö"
我想转换为UTF-8字符串,该字符串可以在“ latin-1”中为encoded
,而不会引发异常。我想通过用最接近的表示形式(例如ascii左右)替换拉丁语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äöü"
感谢您的帮助。
答案 0 :(得分:1)
如果您只是逐个字符地进行操作,则它可以工作,(尽管它不是超级干净的)
dist = tf.sqrt(squared_dist(A, B) + 1e-6)