Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSData字节与Java WS中具有相同base64字符串的字节不匹配_Java_Ios_Objective C_Web Services - Fatal编程技术网

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

NSData字节与Java WS中具有相同base64字符串的字节不匹配,java,ios,objective-c,web-services,Java,Ios,Objective C,Web Services,我正在iOS应用程序中使用协议缓冲区。该应用程序使用一个用Java编写的web服务,该服务返回一个base64编码的字符串 base64字符串的两端相同 然而,在应用程序中,每当我尝试将字符串转换为NSData时,两端的字节数可能相同,也可能不同。结果可能是协议缓冲区异常无效,结束标记无效 例如: Source(bytes) | NSData | Diff 93 93 0 6739 6735 -4 5745

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


是什么导致了这种情况?

仔细检查,问题是我假设Base64就是Base64。我在web服务中使用了url变体,而应用程序的解码预期为正常版本

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


value/char的Base64页映射没有显示下划线,但本文后面将讨论使用下划线的变体。

您的iOS代码是什么样子的?base64看起来像什么?此外,我过去在一些Base64解码器中遇到一些问题,不希望在源代码中使用换行符——不确定这是否适用于此,而是要查看一些内容。您应该比较源(在编码之前)和目的地(解码后)字节,以查看字节是否被省略在某个中间或结尾。关于填充字符串的末尾,有一些琐碎的细节可能会让您感到不适。