파이썬에서 이진 데이터를 보내기 위해 'binary'Thrift 데이터 형식을 사용하려고합니다. 실제 클라이언트 작업이 시작될 때 (실제로 보내기 전에) 클라이언트는 UTF 코딩에 대해 불평하는 예외를 트리거합니다. Thrift Python 라이브러리가 진정한 이진 인코딩을 지원하지 않습니까? 이것은 JSON 프로토콜을 사용하고 있으며 프로토콜이 이진 정의를 위해 자체를 보호하지 않기 때문입니다. Thrift 0.9.1은 '바이너리'필드를 '문자열'로 생성합니다 (Java 및 C++의 경우와 동일). 이 시점에서 '바이너리'의 특성입니까? Python Thrift 바이너리 형식은 인코딩이 필요합니까?
는 드리프트 정의와 클라이언트 코드는 내 :-------------------- Thrift ---------------------
struct Msg {
1: binary aBinary,
}
service Service {
oneway void asyncMsg( 1: Msg msg), // Async
}
-------------------- Python ---------------------
socket = TSocket.TSocket(host, port)
transport = TTransport.TFramedTransport(socket)
protocol = TJSONProtocol.TJSONProtocol(transport)
client = Service.Client(protocol)
transport.open()
binaryData = ""
for a in range(0,255):
binaryData += struct.pack("B",a)
print "Sending a Binary String"
client.asyncMsg(Service.Msg(aBinary = binaryData))
오류 파이썬 클라이언트 코드를 실행할 때 .... 오류 : 원격 끝으로 보내지 못했습니다 : 'UTF8'코덱은 바이트 0x80으로 디코딩 할 수 없습니다 위치 128 : 잘못된 시작 바이트
감사합니다, 로버트
TBinaryProtocol을 사용하면이 문제를 해결할 수 있지만 JSON 인코딩을 사용하여 클라이언트와 서버간에 다른 엔터티를 허용하려고합니다. –
JSON이 문서 전체에서 UTF-8로 정의되어 있기 때문에 의미가 있습니다. '2 진'IDL 유형은 JSON 프로토콜에서 사용할 수 없습니다. –