6

Python - tornado サーバーでプロトコル バッファ メッセージを受信し、バイナリ メッセージから内容を取得する必要があります。

postContent = self.request.body
message = prototemp.ReqMessage()
message.ParseFromString(postContent)

テストツールを使用して完全に機能します。サンドボックス環境で実行し、クライアントからの 1000 件のリクエストをシミュレートすると、特定のケースでは機能しますが、ほとんどのリクエストで例外がスローされます -

  File "server1.py", line 21, in post
    message.ParseFromString(postContent)
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/message.py", line 179, in ParseFromString
    self.MergeFromString(serialized)
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/internal/python_message.py", line 755, in MergeFromString
    if self._InternalParse(serialized, 0, length) != length:
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/internal/python_message.py", line 782, in InternalParse
    pos = field_decoder(buffer, new_pos, end, self, field_dict)
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/internal/decoder.py", line 544, in DecodeField
    if value._InternalParse(buffer, pos, new_pos) != new_pos:
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/internal/python_message.py", line 782, in InternalParse
    pos = field_decoder(buffer, new_pos, end, self, field_dict)
  File "/usr/lib/python2.6/site-packages/protobuf-2.4.1-py2.6.egg/google/protobuf/internal/decoder.py", line 410, in DecodeField
    field_dict[key] = local_unicode(buffer[pos:new_pos], 'utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 1: invalid continuation byte

他の場合には、これらのエラーが発生します-

UnicodeDecodeError: 'utf8' codec can't decode byte 0xbf in position 3: invalid start byte

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 3: unexpected end of data

何が原因でしょうか?

4

2 に答える 2

1

同じ問題が発生します。

ここに参考文献があります[1]。

この場合、バイトを使用する必要があります。

ありがとう。

[1] https://developers.google.com/protocol-buffers/docs/proto#scalar

于 2016-07-12T05:22:07.037 に答える