bal*_*dre 6 cocoa-touch byte-order-mark objective-c utf-8
我正在使用MD5功能和Base64编码生成用户密码(用于登录所用API的数据层)
我在javascript中完成了代码并且很好,但是在Objective C中,我对BOM很感兴趣
我的代码是:
NSString *str = [[NSString alloc]
initWithFormat:@"%@%@%@%d",
[auth uppercaseString],
[user uppercaseString],
[pwd uppercaseString],
totalDaysSince2000];
NSString *sourceString = [[NSString alloc] initWithFormat:@"%02x%02x%02x%@",
0xEF,
0xBB,
0xBF,
str];
NSString *strMd5 = [sourceString MD5];
NSData *sourceData = [strMd5 dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedString = [[sourceData base64EncodedString] autorelease];
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我进入内存:
替代文字http://www.balexandre.com/temp/2010-04-06_1523.png
女巫不是我真正需要的......
我甚至尝试过
"%c%c%c%@", (char)239, (char)187, (char)191, str
Run Code Online (Sandbox Code Playgroud)
没有运气......
使用UTF8String不接缝自动附加BOM,如在C#中:-(
如何正确附加BOM?
尝试将BOM直接嵌入格式字符串中作为转义字符文字:
NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
Run Code Online (Sandbox Code Playgroud)
您可能必须将BOM添加到NSData对象,而不是NSString.像这样的东西:
char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)