2

我在 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 方面,我尝试了来自类似问题的各种算法,这些算法在字节大小和内容上都一致。

这可能是什么原因造成的?

4

1 回答 1

0

经过仔细检查,问题在于我假设 Base64 是 Base64。我在 Web 服务中使用了url变体,而应用程序的解码需要一个普通版本。

我注意到 Base64 中的下划线,我觉得这很奇怪。

Base64 页面http://en.wikipedia.org/wiki/Base64 map of value/char 没有显示下划线,但在文章后面会讨论变体,这些变体确实使用下划线。

于 2013-04-03T17:06:47.070 回答