Python——为什么unicode不会消亡?

Python——为什么unicode不会消亡?,python,unicode,Python,Unicode,我被迫使用Python2.7,最近unicode错误又卷土重来,这些错误似乎是无法消除的。我认为我已经通过创建以下方法解决了这个问题,该方法运行了几个月,没有出现任何问题,但最近出现了各种各样的unicode错误: def kill_unicode(s): if not isinstance(s, (int, np.integer)) and not isinstance(s, (float, np.float)): s = s.encode('unicode_escap

我被迫使用Python2.7,最近unicode错误又卷土重来,这些错误似乎是无法消除的。我认为我已经通过创建以下方法解决了这个问题,该方法运行了几个月,没有出现任何问题,但最近出现了各种各样的unicode错误:

def kill_unicode(s):
    if not isinstance(s, (int, np.integer)) and not isinstance(s, (float, np.float)):
        s = s.encode('unicode_escape', errors='replace').decode('utf-8')
    return(s)
但是,当我将其应用于最近的新数据时,我不断得到标准unicode错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 542: ordinal not in range(128)
注意,这不限于0xc3。如何改进上述功能,使其更具通用性?注意:忽略该值并完全从字符串中删除字符不是一个可行的选项,尽管将其替换为unicode\x03语法是可行的

更新:

你的建议仍然不起作用。下面仍然提供ASCII错误

def kill_unicode(s):
    if isinstance(s, str) or isinstance(s, bytes):
        s = s.encode('unicode_escape', errors='replace').decode('utf-8')
    return(s)

应该消亡的是ASCII,而不是Unicode

问题在于,您没有检查
s
实际上是一个Unicode实例,如果它是一个bytestring,在2.7中,当您调用
encode
时,它会首先尝试使用ASCII编码进行解码


只有当
isinstance(s,str)
为true时,才应执行上述操作。如果你做了这个检查,那么你现有的关于s不是int或float的检查——正如FHTMichell指出的,这是一个奇怪的选择——就变得不必要了。

如果不是isinstance(s,(int,np.integer))而不是isinstance(s,(float,np.float)):
lol什么?这可能是无限多的其他类,为什么只针对这4类进行保护?为什么要把它们放在两个独立的
isinstance
调用中呢?我相信你的意思是
isinstance(s,bytes)
isinstance(s,str)
。没有
bytestring
类。是的,您是对的,已更正。这似乎无法解决问题。无论初始测试如何,我都会收到相同的问题。上述函数的早期版本用于测试字符串,但已被删除,因为它以前禁止了其他问题,而只检查float/int是更好的解决方案。