6

我正在使用 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];  

使用上面的代码我进入内存:

替代文字
(来源:balexandre.com

女巫不是我真正需要的...

我什至尝试过

"%c%c%c%@", (char)239, (char)187, (char)191, str

没有运气...

usingUTF8String不会像在 C# 中那样自动附加 BOM :-(

如何正确附加 BOM?

4

3 回答 3

8

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

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
于 2010-04-06T13:38:10.880 回答
8

您可能必须将 BOM 添加到 NSData 对象,而不是 NSString。像这样的东西:

char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
于 2010-04-06T13:44:47.893 回答
2

我在使用 Swift 和在 Excel 中打开 CSV 文件时遇到了类似的问题。 这个问题也对我帮助很大。

快速使用 CSV 文件的简单解决方案:

let BOM = "\u{FEFF}"
csvFile.append(BOM)
于 2018-01-29T11:29:52.597 回答