NSData字节与Java WS中具有相同base64字符串的字节不匹配

时间:2013-04-03 16:13:46

标签: java ios objective-c web-services

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

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

仔细观察,问题是我假设Base64是Base64。我在网络服务中使用了 url 变体,而应用程序的解码期待正常版本。

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

Base64页面http://en.wikipedia.org/wiki/Base64值/ char的地图没有显示下划线,但本文稍后将介绍使用下划线的变体。