Python将此utf8字符串转换为latin1

时间:2018-07-05 07:57:25

标签: python unicode python-module-unicodedata

我有这个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äöü"

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您只是逐个字符地进行操作,则它可以工作,(尽管它不是超级干净的)

dist = tf.sqrt(squared_dist(A, B) + 1e-6)