В чем причина ошибки protobuf PB Error: кодек utf8 не может декодировать байты в позиции? - PullRequest
0 голосов
/ 18 октября 2019

Мой код C ++ выполняет SerializeToArray и сохраняет в redis.

Затем код python получает эту сериализованную информацию и вызывает ParseFromString для преобразования ее в сообщение protobuf, но я получаю ошибку.

Я пытался использовать SerializeToString и сохранить, но это не сработало.

Это проблема кодирования?

Ошибка:

Traceback (most recent call last):
  File "/data/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/bin/watcher.py", line 202, in nnq_msg_notification_callback
    nnq_msg_notify_proc(self.frame, body_json.get("body"))
  File "/data/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/bin/nnq_msg_notification_process.py", line 31, in nnq_msg_notify_proc
    msg_model = get_new_msg_model(frm, msg_id)
  File "/data/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/bin/usual_msg_notification_process.py", line 66, in get_new_msg_model
    msg_model.ParseFromString(fm_bytes)
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/message.py", line 186, in ParseFromString
    self.MergeFromString(serialized)
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/python_message.py", line 841, in MergeFromString
    if self._InternalParse(serialized, 0, length) != length:
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/python_message.py", line 874, in InternalParse
    pos = field_decoder(buffer, new_pos, end, self, field_dict)
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/decoder.py", line 633, in DecodeRepeatedField
    if value.add()._InternalParse(buffer, pos, new_pos) != new_pos:
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/python_message.py", line 874, in InternalParse
    pos = field_decoder(buffer, new_pos, end, self, field_dict)
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/decoder.py", line 520, in DecodeField
    field_dict[key] = _ConvertToUnicode(buffer[pos:new_pos])
  File "/home/redstarzhang/nn_media/nnq_msg_svr/nnq_msg_svr_watcher/lib/lib/python2.6/site-packages/google/protobuf/internal/decoder.py", line 487, in _ConvertToUnicode
    return local_unicode(byte_str, 'utf-8')

PBErr: ошибка PB: кодек «utf8» не может декодировать байты в позиции 381-382: кодек «utf8» не может декодировать байты в позиции 381-382: недопустимый байт продолжения в поле :. ..

PBErr: ошибка PB: кодек «utf8» не может декодировать байты в позиции 381-382: кодек «utf8» не может декодировать байты в позиции 381-382: недопустимый байт продолжения в поле:

...