Создайте строку UTF-8 с BOM
-
24-09-2019 - |
Вопрос
Я использую функцию MD5 и AND64, кодирующую для генерации секрета пользователя (используется для входа в уровень передачи данных по использованным API)
Я сделал код в JavaScript И все в порядке, но в целях 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];
Используя код выше, я попадаю в память:
(источник: balexandre.com.)
Ведьма не то, что мне действительно нужно ...
Я даже пробовал с
"%c%c%c%@", (char)239, (char)187, (char)191, str
без удачи ...
с использованием UTF8String
не шоу, чтобы автоматически добавить спецификацию, как в C # :-(
Как я могу правильно добавить спецификацию?
Решение
Попробуйте встроить BOM непосредственно в строку формата как скрепленные символьные литералы:
NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
Другие советы
Возможно, вам придется добавить BOM к объекту NSDATA, а не NSSTRING. Что-то вроде этого:
char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
У меня была подобная проблема с SWIFT и открытием CSV Fime в Excel.Этот вопрос Также помог мне много.
Простое решение для Swift с файлом CSV:
let BOM = "\u{FEFF}"
csvFile.append(BOM)