我被迫使用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)
答案 0 :(得分:3)
应该死的是ASCII,而不是Unicode。
问题是你没有检查s
实际上是一个Unicode实例开始 - 如果它是一个字节串,在2.7中当你调用encode
时,它会尝试先解码,使用ASCII编码。
如果isinstance(s, str)
为真,您应该只执行此操作。如果你做了那个检查,那么现有的检查s不是int或float - 正如FHTMichell指出的那样,是一个奇怪的选择 - 变得不必要了。