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*)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 に答える
0

次のメソッドを参照してくださいNSString

- (NSStringEncoding)smallestEncoding
- (NSStringEncoding)fastestEncoding

flagまたは、次のように設定して以下のメソッドを使用しYESます。

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

ただし、これを使用すると、一部のキャラクターを失う可能性があります。

于 2013-02-05T23:12:58.507 に答える