Protobuf在项目中的编码坑

标签(空格分隔): iOS,protobuf


公司现在用的protobuf这个格式来交互,于是前段时间恶补了一下protobuf方面的知识,现在在和API调接口的时候就出来问题,我从后台请求过来的二进制流转字符串一直是nil,但是同样的接口我用json请求就没有问题,使用了Protobuf就转不过来。

  • 第一步,先百度查找方案,什么原因,找到说是编码问题,然后就和后台交涉,他们告诉我protobuf打包是UTF-8,于是我取字符串的时候UTF-8解码,还是nil。

  • 第二步,Google上面看看protobuf的编码格式是什么,官网也没有提这件事,原因就是protobuf就是不需要我们转成字符串,直接操作二进制流。不过,自己在objc提供的编码类型中都试了一下,发现NSISOLatin1StringEncoding这个编码格式好像可以的,这个大概对应web端的编码格式是ISO-88590-1,于是大呼开心,终于解决了。

  • 但是,事情并没有这么简单,在测试有的接口时还是会转成nil,这下我怒了,什么鬼啊,继续查找问题所在,这次在NSDataNSString返回nil的问题上为突破口,发现是NSData内包含非encoding的编码字符,这次终于解决了,只需要把非encoding的字符替换掉就可以了。

结束

其实protobuf并不需要我们转成字符串,但是我就是这么耿直,发现问题就是要知道为什么,不然会很难受,有没有同感!!!

附录

objc中支持的编码格式其实很多,但是没有枚举出来,像UTF-8对应的是4,Chinese (GBK) === -2147482063,如果需要其他编码格式,可自行查找。

推荐阅读更多精彩内容