【发布时间】:2017-12-16 03:48:31
【问题描述】:
我正在从一个经过 base64 编码的服务器接收 http 标头中的数据,并且在解码时遇到问题。我已经将一些现有的 java 代码转换为 Objective-C,并确定 base 64 解码问题的原因是由于 java 和 Objective-C 之间的 UTF-8 解码结果不同。这是一个复制java转换的java sn-p:
import java.util.Base64;
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
try {
String s = "t%2BX";
System.out.println(s);
String utfDecoded = java.net.URLDecoder.decode(s, "UTF-8");
System.out.println("Decoded UTF");
System.out.println(utfDecoded);
byte[] b = Base64.getDecoder().decode(utfDecoded);
System.out.println("Decoded bytes");
System.out.println(b);
} catch(Exception e) {
System.out.println("exception");
}
}
}
运行原字符串时,解码后的字符串输出为:
t%2BX
t+X
现在这是我的 Obj-C 代码:
NSString* utf8EncodedString = @"t%2BX";
const char *cString = [utf8EncodedString cStringUsingEncoding:NSISOLatin1StringEncoding];
NSString *decodedUTF8 = [NSString stringWithCString: cString encoding:NSUTF8StringEncoding];
NSLog(utf8EncodedString);
NSLog(decodedUTF8);
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:decodedUTF8 options: 0];
运行时,decodedData 为 nil,这意味着 initWithBase64EncodedString 认为输入不是有效的 base54 编码,控制台中的输出是:
t2BX
t2X
如何正确解码 UTF-8 数据,以便将其提供给 initWithBase64EncodedString?
(这不是正在解码的完整实际字符串,但我已将问题缩小到导致对 initWithBase64EncodedString 的调用为零的一小部分)。
【问题讨论】:
标签: ios objective-c