Crie uma string UTF-8 com BOM
-
24-09-2019 - |
Pergunta
Estou usando a função MD5 e a codificação base64 para gerar um segredo do usuário (usado para fazer login na camada de dados da API usada)
Eu fiz o código em JavaScript E tudo bem, mas no objetivo C estou lutando com o Bom
Meu código é:
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];
Usando o código acima, estou entrando na memória:
(fonte: balexandre.com)
Bruxa não é o que eu realmente preciso ...
Eu até tentei com
"%c%c%c%@", (char)239, (char)187, (char)191, str
sem sorte ...
usando UTF8String
não costure para anexar o BOM automaticamente como em C# :-(
Como posso anexar o nascimento corretamente?
Solução
Tente incorporar o nascimento diretamente na sequência do formato como literais de caracteres escapados:
NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
Outras dicas
Pode ser necessário adicionar o nascido ao objeto NSDATA, não ao NSString. Algo assim:
char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
Eu tive um problema semelhante com o Swift e a abertura do CSV no Excel.Essa questão Também me ajudou muito.
Solução simples para Swift com o arquivo CSV:
let BOM = "\u{FEFF}"
csvFile.append(BOM)