标签(空格分隔): iOS,protobuf
公司现在用的protobuf这个格式来交互,于是前段时间恶补了一下protobuf方面的知识,现在在和API调接口的时候就出来问题,我从后台请求过来的二进制流转字符串一直是nil
,但是同样的接口我用json请求就没有问题,使用了Protobuf就转不过来。
- 第一步,先百度查找方案,什么原因,找到说是编码问题,然后就和后台交涉,他们告诉我protobuf打包是UTF-8,于是我取字符串的时候UTF-8解码,还是nil。
- 第二步,Google上面看看protobuf的编码格式是什么,官网也没有提这件事,原因就是protobuf就是不需要我们转成字符串,直接操作二进制流。不过,自己在objc提供的编码类型中都试了一下,发现
NSISOLatin1StringEncoding
这个编码格式好像可以的,这个大概对应web端的编码格式是ISO-88590-1,于是大呼开心,终于解决了。
- 但是,事情并没有这么简单,在测试有的接口时还是会转成nil,这下我怒了,什么鬼啊,继续查找问题所在,这次在
NSData
转NSString
返回nil
的问题上为突破口,发现是NSData
内包含非encoding
的编码字符,这次终于解决了,只需要把非encoding
的字符替换掉就可以了。
结束
其实protobuf并不需要我们转成字符串,但是我就是这么耿直,发现问题就是要知道为什么,不然会很难受,有没有同感!!!
附录
objc中支持的编码格式其实很多,但是没有枚举出来,像UTF-8对应的是4,Chinese (GBK) === -2147482063,如果需要其他编码格式,可自行查找。