создать строку UTF-8 с спецификацией - PullRequest
6 голосов
/ 06 апреля 2010

Я использую функцию MD5 и Base64 Encoding для генерации секрета пользователя (используется для входа на уровень данных используемого API)

Я сделал код в javascript , и это нормально, но в Objective C я борюсь с спецификацией

мой код:

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

используя приведенный выше код, я попадаю в память:

альтернативный текст http://www.balexandre.com/temp/2010-04-06_1523.png

Ведьма - это не то, что мне действительно нужно ...

Я даже пытался с

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

без удачи ...

Использование UTF8String не позволяет автоматически добавлять спецификацию, как в C #: - (

Как правильно добавить спецификацию?

Ответы [ 3 ]

8 голосов
/ 06 апреля 2010

Попробуйте встроить спецификацию непосредственно в строку формата в качестве экранированных литералов:

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
7 голосов
/ 06 апреля 2010

Возможно, вам придется добавить спецификацию к объекту NSData, а не NSString. Примерно так:

char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
0 голосов
/ 29 января 2018

У меня была похожая проблема со Swift и открытием CSV-файла в Excel. Этот вопрос также мне очень помог.

Простое решение для swift с файлом CSV:

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