Estoy tratando de usar el BEncoding ObjC class para decodificar un archivo .torrent
.¿Convertir bytes de NSData a NSString?
NSData *rawdata = [NSData dataWithContentsOfFile:@"/path/to/the.torrent"];
NSData *torrent = [BEncoding objectFromEncodedData:rawdata];
Cuando NSLog
torrent
consigo el siguiente:
{
announce = <68747470 3a2f2f74 6f727265 6e742e75 62756e74 752e636f 6d3a3639 36392f61 6e6e6f75 6e6365>;
comment = <5562756e 74752043 44207265 6c656173 65732e75 62756e74 752e636f 6d>;
"creation date" = 1225365524;
info = {
length = 732766208;
name = <7562756e 74752d38 2e31302d 6465736b 746f702d 69333836 2e69736f>;
"piece length" = 524288;
....
¿Cómo convierto el name
en un NSString? He tratado ..
NSData *info = [torrent valueForKey:@"info"];
NSData *name = [info valueForKey:@"name"];
unsigned char aBuffer[[name length]];
[name getBytes:aBuffer length:[name length]];
NSLog(@"File name: %s", aBuffer);
..which retrives los datos, pero parece tener basura adicional después de que Unicode:
File name: ubuntu-8.10-desktop-i386.iso)
También he probado (from here) ..
NSString *secondtry = [NSString stringWithCharacters:[name bytes] length:[name length]/sizeof(unichar)];
..pero esto parece devolver un montón de caracteres aleatorios:
扵湵畴㠭ㄮⴰ敤歳潴⵰㍩㘸椮潳
El hecho de que la primera forma (como se menciona en la documentación de Apple) devuelve la mayoría de los datos correctamente, con algunos bytes adicionales me hace pensar que podría ser un error en la biblioteca BEncoding ... pero mi desconocimiento de ObjC es más es probable que la culpa ..
"扵 湵 畴 㠭 ㄮ ⴰ 敤 歳 潴 ⵰㍩ 㘸 椮 潳" no es chino. Al menos no los que un hablante nativo de chino podría reconocer. –
@TylerLong punto justo, editado! – dbr