0

我需要在我的应用程序中保存一个 HTML 页面,当找到像“€”这样的字符时,保存的文件显示错误。我尝试了几种编码,但都没有解决这个问题,有什么解决方案吗?我也尝试替换 HTML 名称的字符,但它仍然不起作用。这是我的代码:

 NSString *HTML = [web stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML;"];

    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", [path objectAtIndex:0],@"code.html"];

    int enc_arr[] = {
        NSISOLatin1StringEncoding,      // ESP
        NSUTF8StringEncoding,           // UTF-8
        NSShiftJISStringEncoding,       // Shift_JIS
        NSJapaneseEUCStringEncoding,    // EUC-JP
        NSISO2022JPStringEncoding,      // JIS
        NSASCIIStringEncoding           // ASCII
    };

    NSData *urlData= nil;

    for (int i=0; i<6; i++) {
        urlData = [HTML dataUsingEncoding:enc_arr[i]];
        if (urlData!=nil) {
            break;
        }
    }

    [urlData writeToFile:filePath atomically:YES];
4

2 回答 2

0

请参阅以下方法NSString

- (NSStringEncoding)smallestEncoding
- (NSStringEncoding)fastestEncoding

或者只是使用下面的方法flag设置为YES

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag

但有了这个,你可以失去一些角色。

于 2013-02-05T23:12:58.507 回答
0

好的,我终于做到了,这不是最好的方法,而是唯一对我有用且不使用外部库的方法:

-(NSString*)escapeHTML:(NSString*)code{

    NSMutableArray *maExceptions = [[NSMutableArray alloc] initWithObjects: @"Œ", @"œ", @"Š", @"š", @"Ÿ", @"ƒ", @"‘", @"’", @"‚", @"“", @"”", @"„", @"†", @"‡", @"•", @"…", @"‰", @"€", @"™", nil];

    for (int i=0; i<[maExceptions count]; i++) {
        code = [code stringByReplacingOccurrencesOfString:[maExceptions objectAtIndex:i] withString:[NSString stringWithFormat:@"&#x%x;",[[maExceptions objectAtIndex:i] characterAtIndex:0]]];

    }

    return code;
}
于 2013-02-06T19:59:27.070 回答