我需要在我的应用中保存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];
答案 0 :(得分:0)
请参阅NSString
:
- (NSStringEncoding)smallestEncoding
- (NSStringEncoding)fastestEncoding
或仅使用以下方法,flag
设置为YES
:
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag
但是有了这个,你可以放松一些角色。
答案 1 :(得分: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;
}