crear una cadena UTF-8 con BOM
-
24-09-2019 - |
Pregunta
Estoy usando la función MD5 y la codificación Base64 para generar un secreto de usuario (usado para iniciar sesión en la capa de datos de la API utilizada)
Hice el código en javascript y está bien, pero en Objective C estoy luchando con la lista de materiales
mi código es:
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 el código de arriba me estoy metiendo en la memoria:
(fuente: balexandre.com)
La bruja no es lo que realmente necesito...
Incluso lo intenté con
"%c%c%c%@", (char)239, (char)187, (char)191, str
sin suerte...
usando UTF8String
No parece agregar la lista de materiales automáticamente como en C# :-(
¿Cómo puedo agregar la lista de materiales correctamente?
Solución
Trate de incorporar la lista de materiales directamente en la cadena de formato como literales carácter de escape:
NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
Otros consejos
Es posible que tenga que añadir la lista de materiales al objeto NSData, no el NSString. Algo como esto:
char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
he tenido problema similar con Swift y apertura FIME CSV en Excel. Esta pregunta también me ha ayudado mucho.
Una solución simple para SWIFT con el archivo CSV:
let BOM = "\u{FEFF}"
csvFile.append(BOM)