Ответ 1
Попробуйте ввести строку кода вместо двух последних строк. Надеюсь, это поможет:
line=line.decode('utf-8','ignore').encode("utf-8")
У меня есть большое количество файлов и парсера. Мне нужно удалить все символы un 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.
Попробуйте ввести строку кода вместо двух последних строк. Надеюсь, это поможет:
line=line.decode('utf-8','ignore').encode("utf-8")
Для python 3, как указано в комментарии в этом потоке, вы можете:
line = bytes(line, 'utf-8').decode('utf-8', 'ignore')
Параметр "игнорировать" предотвращает возникновение ошибки, если какие-либо символы не могут быть декодированы.
Если ваша строка уже является объектом байта (например, b'my string'
), вам просто нужно декодировать ее с помощью decode('utf-8', 'ignore')
.
Пример для обработки символов 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)