2010-04-06 22 views
4

我使用MD5功能和BASE64編碼,以產生一個用戶祕密(用於登錄到所使用的API的數據層)創建UTF-8字符串,BOM

我做的代碼在javascript和它的細,但在目標C我與BOM strugling

我的代碼是:

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]; 

使用上面我進入內存的代碼:

alt text http://www.balexandre.com/temp/2010-04-06_1523.png

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

我甚至試圖與

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

,沒有運氣...使用

UTF8String不縫到BOM自動追加如在C#中:-(

如何正確附加BOM?

回答

8

嘗試直接在格式字符串中爲轉義字符文字中嵌入BOM:

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str]; 
+0

這樣做的伎倆費魯喬,謝謝! – balexandre 2010-04-06 17:22:44

6

您可能必須將BOM添加到NSData對象,而不是NSString的。這樣的事情:

char BOM[] = {0xEF, 0xBB, 0xBF}; 
NSMutableData* data = [NSMutableData data]; 
[data appendBytes:BOM length:3]; 
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]]; 
0

我有類似的問題與斯威夫特和在Excel中打開CSV文件。 This question也幫了我很多。

的迅速簡單的解決方案與CSV文件:

let BOM = "\u{FEFF}" 
csvFile.append(BOM)