Python 将给定字符集之外的字符替换为U+;FFFD?

Python 将给定字符集之外的字符替换为U+;FFFD?,python,python-2.x,python-unicode,Python,Python 2.x,Python Unicode,我必须接受utf-8中的用户输入,并将其提供给只接受ISO-8859-15的系统我想将用户提供的unicode字符串中的所有非ISO-8859-15字符转换为U+FFFD,以便向用户展示有问题的字符。最简单的方法是什么 我正在使用Python 2.7 *)对“最简单”的任意定义是:)这个怎么样 def is_latin_9(c): try: c.encode('iso-8859-15') return True except UnicodeEnco

我必须接受utf-8中的用户输入,并将其提供给只接受ISO-8859-15的系统我想将用户提供的unicode字符串中的所有非ISO-8859-15字符转换为U+FFFD,以便向用户展示有问题的字符。最简单的方法是什么

我正在使用Python 2.7

*)对“最简单”的任意定义是:)

这个怎么样

def is_latin_9(c):
    try:
        c.encode('iso-8859-15')
        return True
    except UnicodeEncodeError:
        return False

def replace_non_latin_9(s):
    return ''.join(c if is_latin_9(c) else u'\ufffd' for c in s)

你是说拉丁语-1吗?@JayanthKoushik不,看:-但这在这里其实并不重要。无论如何,同样的问题也会出现。Python似乎没有拉丁语9。@JayanthKoushik-True,它在Python中被称为“ios-8859-15”。我写问题时很懒。现在修好了。谢谢,这就是诀窍。非常冗长,速度可能非常慢,尤其是当输入有很多非拉丁字母9的时候——但实际上这对我来说不是问题。我希望有一种更内在的方式,但也许没有。可能一种更快的方法是制作一组属于拉丁语-9的unicode代码点,但这意味着需要更多的代码。我认为这不可能比O(n)更快。你确实需要检查每个角色。至于长篇大论,这没什么错。(到目前为止,这很学术,但想出来很有趣。)当然是O(n)。我不熟悉Python的内部结构,但我认为函数调用和每个字符的try-catch可能不是一个便宜的解决方案。