使用BOM创建UTF-8字符串

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?

Fer*_*cio 8

尝试将BOM直接嵌入格式字符串中作为转义字符文字:

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
Run Code Online (Sandbox Code Playgroud)


Tom*_*ing 7

您可能必须将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)