objective-c - 解析二进制MOBI文件: best approach?

标签 objective-c macos cocoa parsing

它在二进制数据之间包含元数据。我可以解析标题为 Agent_of_Chang2e 的第一行,但我还需要获取标题底部的元数据。我知道它没有标准细节。

enter image description here

此代码无法解码底线。例如,我收到以下格式错误的文本:

FÃHANGE</b1èrX)¯­ÌiadenÕniverse<sup><smalÀ|®¿8</¡Îovelÿ·?=SharonÌeeándÓteveÍiller8PblockquoteßßÚ>TIa÷orkyfiction.Áll@eãacÐ0hðortrayedén{n)áreïrzus0¢°usly.Ôhatíean0authhmxétlõp.7N_\

©ß© 1988âyÓOOKãsòeserved.0ðart)publicaZmayâehproduc

  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    char buffer[1024];
    FILE* file = fopen([path UTF8String], "r");
    if (file != 0)
    {
        while(fgets(buffer, 1024, file) != NULL)
        {
            NSString* string = [[NSString alloc] initWithCString: buffer encoding:NSASCIIStringEncoding];
            NSLog(@"%@",string);
            [string release];
        }
        fclose(file);
    }
    [pool drain];

最佳答案

nielsbot 已经发布了 link to the format specification

正如您所读到的,该文件不是文本文件,而是二进制编码的。使用 NSString 实例解析它并不是一个好主意。

您必须读取文件二进制文件,即。 e.使用 NSData:

NSData content = [NSData dataWithContentsOfFile:path];

那你就得自己把相关信息拿出来了。例如,如果您想读取未压缩的文本长度,您会在链接文档中发现该信息从位置4开始,长度为4。

int32_t uncompressedTextLength; // 4 bytes are 32 bit.
[content getBytes:&uncompressedLenght range:NSMakeRange(4, 4)];

也许你必须处理字节顺序。

关于objective-c - 解析二进制MOBI文件: best approach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22713027/

相关文章:

ios - 您如何访问 Xcode 中界面构建器组件的 'userLabel' 字段?

ios - 显示网络图像是使用 NSAllowsArbitraryLoads 的正当借口?

macos - 动态地将单元添加到使用自动布局布局的 NSMatrix 中会产生奇怪的效果;为什么?

objective-c - NSUserDefaults 可以用来读/写系统首选项 plist 吗?

ios - @encoding 类型 id 其中 id 实际上是任何对象

swift - NSPopover 自动布局问题中的 NScrollView

objective-c - 反转 Objective-C @available?

iphone - NSZombieEnabled 不报告导致 EXC_BAD_ACCESS 错误的对象类型

cocoa - 将cocoa webview嵌入到QT应用程序时的事件问题

ios - 如何在一个xib中添加三个表以及三个连接