Python - 为什么unicode不会死?

时间:2018-06-13 15:34:26

标签: python unicode

我被迫使用python 2.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。关于如何改进上述功能的任何想法都更普遍?注意忽略该值并完全从字符串中删除char不是一个可行的选项,尽管用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)

1 个答案:

答案 0 :(得分:3)

应该死的是ASCII,而不是Unicode。

问题是你没有检查s实际上是一个Unicode实例开始 - 如果它是一个字节串,在2.7中当你调用encode时,它会尝试先解码,使用ASCII编码。

如果isinstance(s, str)为真,您应该只执行此操作。如果你做了那个检查,那么现有的检查s不是int或float - 正如FHTMichell指出的那样,是一个奇怪的选择 - 变得不必要了。