0

我正在使用protobuf,需要通过api请求发送转换后的字节,并且需要在服务器上再次解码,字符串将是这样的:

\b\xC0\xB3\xB9\xDD\xFC\x1C\x12XBalance debited with 62.0 Expiry Date is 09-11-2016 09:10:00 Remaining Balance is 1490.0\x1A\x0FDebited Balance\"XBalance debited with 62.0 Expiry Date is 09-11-2016 09:10:00 剩余余额为 1490.0(\x99\x9C\xCE\xBF\x05

如何发送这种类型的请求并在服务器上正确获取?

或者任何人帮助我使用 protobuf 发送信息。

当我在正文中发送字符串时,它会替换表单

\x99\x9C\xCE\xBF\x05

x99x9CxCExBFx05

当发送标头时,它替换为

\\x99\\x9C\\xCE\\xBF\\x05

谢谢

4

1 回答 1

0

除了我在评论中写的内容之外,ruby protobufbinding home包含一个如何实现它的完美示例:

require 'google/protobuf'

# generated from my_proto_types.proto with protoc:
#  $ protoc --ruby_out=. my_proto_types.proto
require 'my_proto_types'

mymessage = MyTestMessage.new(:field1 => 42, :field2 => ["a", "b", "c"])
mymessage.field1 = 43
mymessage.field2.push("d")
mymessage.field3 = SubMessage.new(:foo => 100)

# ⇓⇓⇓ HERE ⇓⇓⇓
encoded_data = MyTestMessage.encode(mymessage)
# ⇑⇑⇑ HERE ⇑⇑⇑
decoded = MyTestMessage.decode(encoded_data)
assert decoded == mymessage

您需要做的就是在发送之前对字节进行编码:

mymessage = MyTestMessage.new(message: '\x99\x9C\xCE\xBF\x05')
encoded_data = MyTestMessage.encode(mymessage)
# OR encoded_data = MyTestMessage.encode_json(mymessage)

现在发送encoded_data给您的收件人。

于 2017-01-03T06:32:05.783 回答