从字符串中删除所有非 utf-8 符号

问题描述 投票:0回答:5

我有大量的文件和解析器。我要做的就是去掉所有非 utf-8 符号并将数据放入 mongodb 中。 目前我有这样的代码。

with open(fname, "r") as fp:
    for line in fp:
        line = line.strip()
        line = line.decode('utf-8', 'ignore')
        line = line.encode('utf-8', 'ignore')

不知何故我仍然收到错误

bson.errors.InvalidStringData: strings in documents must be valid UTF-8: 
1/b62010montecassianomcir\xe2\x86\x90ta0\xe2\x86\x90008923304320733/290066010401040101506055soccorin

我不明白。有一些简单的方法可以做到吗?

UPD:似乎 Python 和 Mongo 不同意 Utf-8 有效字符串的定义。

python mongodb encode
5个回答
94
投票

尝试使用下面的代码行而不是最后两行。希望有帮助:

line=line.decode('utf-8','ignore').encode("utf-8")

37
投票

对于 python 3,正如本线程的评论中提到的,您可以这样做:

line = bytes(line, 'utf-8').decode('utf-8', 'ignore')

“ignore”参数可防止在无法解码任何字符时引发错误。

如果您的行已经是字节对象(例如

b'my string'
),那么您只需使用
decode('utf-8', 'ignore')
对其进行解码即可。


7
投票

处理非 utf-8 字符的示例

import string

test=u"\n\n\n\n\n\n\n\n\n\n\n\n\n\nHi <<First Name>>\nthis is filler text \xa325 more filler.\nadditilnal filler.\n\nyet more\xa0still more\xa0filler.\n\n\xa0\n\n\n\n\nmore\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfiller.\x03\n\t\t\t\t\t\t    almost there \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nthe end\n\n\n\n\n\n\n\n\n\n\n\n\n"

print ''.join(x for x in test if x in string.printable)

0
投票
with open(fname, "r") as fp:
for line in fp:
    line = line.strip()
    line = line.decode('cp1252').encode('utf-8')

0
投票

我只会用 ascii 编码。

line = line.encode('ascii', 'ignore')
© www.soinside.com 2019 - 2024. All rights reserved.