我在iOS应用程序中使用协议缓冲区。该应用程序使用Java编写的Web服务,该服务会回显base64编码的字符串。
base64字符串是两端的相同。
然而,在应用程序中,每当我尝试将字符串转换为NSData时,两端的字节数可能相同也可能不同。结果是可能的无效协议缓冲区异常,无效的结束标记。
例如:
Source(bytes) | NSData | Diff
93 93 0
6739 6735 -4
5745 5739 -6
在空协议缓冲区的简单情况下,字节相等。
这是Java源代码:
import org.apache.commons.codec.binary.Base64;
....
public static String bytesToBase64(byte[] bytes) {
return Base64.encodeBase64String(bytes);
}
在iOS方面,我尝试过类似问题的各种算法,这些算法在字节大小和内容上都是一致的。
导致这种情况的原因是什么?
答案 0 :(得分:0)
仔细观察,问题是我假设Base64是Base64。我在网络服务中使用了 url 变体,而应用程序的解码期待正常版本。
我注意到Base64中的下划线,我觉得很奇怪。
Base64页面http://en.wikipedia.org/wiki/Base64值/ char的地图没有显示下划线,但本文稍后将介绍使用下划线的变体。