create an UTF-8 string with BOM

不想你离开。 提交于 2019-11-28 04:26:57

问题


I'm using MD5 function and Base64 Encoding to generate a User Secret (used to login to data layer of the used API)

I did the code in javascript and it's fine, but in Objective C I'm strugling with the BOM

my code is:

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

using the code above I'm getting into the memory:


(source: balexandre.com)

witch is not what I really need...

I even tried with

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

with no luck...

using UTF8String does not seam to append the BOM automatically as in C# :-(

How can I append the BOM correctly ?


回答1:


Try embedding the BOM directly in the format string as escaped character literals:

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



回答2:


You might have to add the BOM to the NSData object, not the NSString. Something like this:

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



回答3:


I had similar issue with Swift and opening CSV fime in Excel. This question also helped me a lot.

Simple solution for swift with CSV file:

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


来源:https://stackoverflow.com/questions/2585024/create-an-utf-8-string-with-bom

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!