0

我的应用程序(适用于 Mac)生成一些 HTML……然后需要将这个 HTML 保存到 .html 文件中。我正在尝试使用这样的 NSSavePanel:

- (IBAction)saveFile:(id)sender{
    NSSavePanel *savePanel = [NSSavePanel savePanel];
    [savePanel setRequiredFileType:@"html"];
    [savePanel setTitle:@"Save Code to File"];
    if ([savePanel runModal] == NSOKButton) 
    {
        [[_codeStore RTFFromRange:
          NSMakeRange(0, [[_codeStore string] length])] 
         writeToURL:[savePanel URL] atomically:YES];
        NSLog(@"saved");
    }    
}

我的问题是这不保存是纯文本。例如,当我在网络浏览器中打开生成的文件时,会显示 html,但是

{\rtf1\ansi\ansicpg1252\cocoartf1157\cocoasubrtf700 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\ tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\f0\fs24\cf0

位于页面顶部...

4

2 回答 2

1

问题看起来是

    [[_codeStore RTFFromRange: NSMakeRange(0, [[_codeStore string] length])]
     writeToURL: [savePanel URL]
     atomically: YES];

您正在输出包含 HTML 的 RTF 文档。你需要

    [[_codeStore string] writeToURL: [savePanel URL] 
                         atomically: YES
                           encoding: NSUTF8StringEncoding
                              error: nil];

这将从您的 NSAttributedString 获取原始 NSString_codeStore并将其写入文件。

于 2012-04-09T14:44:39.987 回答
0

我认为使用 rtf 编码会导致问题,因为它可以使用转义序列写入超过 8 位。您可以尝试使用简单的 nsstring 方式写入文件。

BOOL ok = [string writeToFile:path atomically:YES

                  encoding:NSUnicodeStringEncoding error:&error];
于 2012-04-09T14:47:23.280 回答