这是我第一次尝试用Google缓冲区编写一个原型。我的档案是这样的:
syntax = "proto3";
package Clark.EDI.Protos;
// [START csharp_declaration]
option csharp_namespace = "Clark.EDI.Protos";
// [END csharp_declaration]
// [START messages]
message Address {
required int32 addressId = 1;
optional string namePrimary = 2;
optional string nameSecondary = 3;
optional string streetPrimary = 4;
optional string streetSecondary = 5;
optional string city = 6;
optional string stateCode = 7;
optional string zipCode = 8;
optional string countryCode = 9;
}
// [END messages]我试着像这样编译它:
protoc _out=src address.proto
即使我把它定义为proto3,它也是要求必需的或可选的。
当我包含required或optional时,我会收到这些消息,但没有收到.cs文件。
address.proto:1:1:解释非ascii码点239。address.proto:1:1:预期的顶级语句(例如"message")。address.proto:1:2:解释非ascii码点187。address.proto:1:3:解释非ascii码点191。
我错过了什么或者做错了什么?
发布于 2016-07-28 14:45:13
我认为您的文本编辑器正在悄悄地在address.proto文件的开头插入字节顺序标记。错误消息意味着文件中的前三个字节是239 187 191,或EF BB BF,它是UTF-8字节顺序标记:
Encoding Hexadecimal Decimal CP1252 characters
UTF-8 EF BB BF 239 187 191 你用的是哪个文本编辑器?如果您在Windows上,请尝试在记事本或Notepad++中打开文件。如果您摆弄编码设置,您应该会在文件开始时看到3个意想不到的字符。把他们移走。
发布于 2016-07-28 16:19:16
如果您使用的是protoc二进制v3,则将删除所需/可选的关键字。
因此,删除所有必需的/可选的关键字
我使用V3编译了您的消息,在删除了必需的/可选的关键字之后成功地编译了它。
注意:将您的文件保存为ANSI或UTF-8,不要保存为UniCode。
您可以将v3安装为nuget包。
发布于 2017-01-04 06:26:26
我也面临着同样的问题,因为我是从pdf中复制出来的。在我用手编码之后,它就起作用了。
https://stackoverflow.com/questions/38638951
复制相似问题