2013-02-28 2 views
2

나는 (세 번 네 나는 그것을 얻을) 나는이 오류가 나는 그것을 얻을 이유를 이해할 수없는 다음 코드구글 프로토콜 버퍼 오류

int lenSend = odl->ByteSize(); 
char* buf = (char *)malloc(lenSend); 
odl->SerializeToArray(buf, lenSend); 

을 사용하고 있습니다 :

libprotobuf의 오류 구글 /protobuf/wire_format.cc:1059] 프로토콜 버퍼 직렬화 중에 잘못된 UTF-8 데이터가 포함 된 문자열이 발견되었습니다. 문자열은 UTF-8 만 포함해야합니다. 원시 바이트에 '바이트'유형을 사용하십시오. libprotobuf ERROR google/protobuf/wire_format.cc : 1059] 프로토콜 버퍼를 직렬화하는 중에 잘못된 UTF-8 데이터가 포함 된 문자열이 발생했습니다. 문자열은 UTF-8 만 포함해야합니다. 원시 바이트에 '바이트'유형을 사용하십시오. libprotobuf ERROR google/protobuf/wire_format.cc : 1059] 프로토콜 버퍼를 직렬화하는 중에 잘못된 UTF-8 데이터가 포함 된 문자열이 발생했습니다. 문자열은 UTF-8 만 포함해야합니다. 원시 바이트에 '바이트'유형을 사용하십시오.

감사합니다.

+0

데이터가 다른 쪽 (소켓을 통한 페이로드 용 GPB 사용)에 도착했음을 유의해야하며 괜찮아 보이지만 다른 쪽에서는 비 직렬화시 동일한 메시지가 표시됩니다. 이 메시지를 그냥 억제 할 수 있습니까? – user1676605

답변

4

메시지의 조언에 따라 경고를 제거 할 수 있습니다!

string으로 정의되었지만 비 UTF-8 문자를 넣고있는 odl (사용자의 .proto 파일에 있음) 정의의 필드가 있어야합니다. The docs state that you shouldn't do this. 이 값을 bytes으로 변경하면 경고가 사라집니다.

0

문자열 문자열은 항상 UTF-8 인코딩 또는 7 비트 ASCII 텍스트를 포함해야합니다. string 문자열 str/unicode [4]

바이트 임의의 바이트 시퀀스를 포함 할 수 있습니다. 문자열 ByteString str

somtimes 문자열 대신 사용자 바이트를 사용해야합니다!

0

바이트를 사용하여 문자열을 대체하십시오. 인코딩은 UTF-8 또는 ASCII가 아닙니다.