python - 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。关于如何改进上述功能使其更通用的任何想法?请注意,忽略该值并完全从字符串中删除字符不是一个可行的选择,尽管用 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 实例开始 - 如果它是一个字节串,在 2.7 中,当你调用encode
它时,它会首先尝试使用 ASCII 编码进行解码。
isinstance(s, str)
如果是真的,你应该只做这些。如果您进行该检查,那么您现有的检查 s 不是 int 或 float - 正如 FHTMichell 指出的那样,这是一个奇怪的选择 - 就变得不必要了。