【发布时间】:2015-03-28 13:59:37
【问题描述】:
我正在尝试使用 base64 编码对图像进行编码并通过 JSON 传递它,以生成 JSON 请求并调用 RESTful API 我正在使用 RestKit。
我在日志中看到的是 RestKit 在编码图像中添加了转义字符,这阻止了服务器端有效解码图像并失败。
我想知道阻止 RestKit 添加转义字符的最佳选择是什么
下面是例子
VpT\/X8WWDCpj1XBpJ1zPBDuwLHLnpCZgnmLX3EXaffi0p7NklAPgO7HZsmxzC\/XITc\/K4iwRSG
可以看到字符串中添加了斜杠 (\/)。
这是我用来编码字符串的代码
NSData *originalPhoto = UIImagePNGRepresentation([UIImage imageNamed:@"Time_Icon.png"]);
NSString *base64PhotoString = [Base64 encode:originalPhoto];
Base64.m如下
+ (NSString*) encode:(const uint8_t*) input length:(NSInteger) length {
NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
uint8_t* output = (uint8_t*)data.mutableBytes;
for (NSInteger i = 0; i < length; i += 3) {
NSInteger value = 0;
for (NSInteger j = i; j < (i + 3); j++) {
value <<= 8;
if (j < length) {
value |= (0xFF & input[j]);
}
}
NSInteger index = (i / 3) * 4;
output[index + 0] = encodingTable[(value >> 18) & 0x3F];
output[index + 1] = encodingTable[(value >> 12) & 0x3F];
output[index + 2] = (i + 1) < length ? encodingTable[(value >> 6) & 0x3F] : '=';
output[index + 3] = (i + 2) < length ? encodingTable[(value >> 0) & 0x3F] : '=';
}
return [[[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding] autorelease];
}
+ (NSString*) encode:(NSData*) rawBytes {
return [self encode:(const uint8_t*) rawBytes.bytes length:rawBytes.length];
}
我将此编码字符串作为字符串传递给 RestKit 请求
【问题讨论】:
-
您采用什么方法来创建 base64 字符串(显示代码)?
-
@Wain 添加了您要求的详细信息,请检查
-
@wain 我的问题与stackoverflow.com/questions/14724868/… 类似,但不确定答案到底在说什么
-
另一个答案看起来好像是处理提供的编码的服务器问题,而不是客户端问题......
-
@wain 当然,但是当服务器 API 已经投入生产并且其他客户端(如 web 和 android)正常工作时,这是不可能的