我的iOS项目中有一个UIWebview,我正在从Web服务加载英文和土耳其语内容。
我用适当的HTML标头包装html字符串,然后将其保存到本地文件,然后在我的UIWebview中显示保存文件的内容。
以下是我用来保存和显示HTML的代码。
-(void) prepareHTML:(NSString*) html {
tableOfcontentsHashMap = [NSMutableDictionary new];
// html = [NSString stringWithFormat:@"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"></head><body>%@</body></html>",html];
html = [NSString stringWithFormat:@"<html lang=\"fr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\"/><meta name=\"viewport\" content=\"width=320; initial-scale=0.5; maximum-scale=1.0; user-scalable=1;\"/></head><body style=\"width:500;font-size:20px;\">%@</body></html>",html];
HTMLDocument *document = [HTMLDocument documentWithString:html];
NSArray *headers = [document nodesMatchingSelector: @"h1,h2"];
NSInteger x = 0;
for (HTMLElement *header in headers) {
NSMutableOrderedSet *children = [header.parentNode mutableChildren];
NSString * hash =[NSString stringWithFormat: @"heading_%ld", (long)x];
HTMLElement *wrapper = [[HTMLElement alloc] initWithTagName:@"div"
attributes:@{@"id":
hash}];
[children insertObject:wrapper atIndex:[children indexOfObject:header]];
[tableOfcontentsHashMap setObject:hash forKey:header.textContent];
x++;
}
NSLog(@"Final HTML: %@",[document serializedFragment]);
[self writeHtmlToFile:[document serializedFragment] onWriteCallback:^(id result) {
if(result) {
NSLog(@"FilePath: %@",result);
htmlFile = result;
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[self.webView loadData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:nil];
} else {
[Utils showMessageHUDInView:self.view withMessage:@"Error Displaying information" afterError:YES];
}
}];
}
使用上面的代码,带有英文的HTML显示得很好,但是带有土耳其语文字的HTML根本没有显示,即使加载得很好。
我已经尝试了几种编码技巧/建议,如代码中所示。但是我无法让它显示土耳其语HTML字符串。
欢迎来自此处的任何建议。
感谢。
答案 0 :(得分:1)
关于charset。在ISO 8859-9
UTF-8
meta
HTML
内容中使用<head>
代替a2lix_translations_gedmo
作为字符集
这个link提到土耳其字符集。
土耳其计算机可能使用字符集ISO 8859-9(“Latin 5”),其中 除了很少使用的冰岛语之外,它与拉丁语1相同 字符“eth”,“thorn”和“y with acute accent”被替换为 所需的土耳其人物。如果您正在阅读土耳其语文本 维基百科,当你看到这些冰岛人物时,他们很可能 意味着是土耳其人(土耳其计算机的用户可能或可能 没有正确看到它们。如果您要输入土耳其语文本 维基百科,请注意Bomis服务器将网页标识为ISO 8859-1,并没有办法覆盖这个,所以即使这些 字符对您来说是正确的,它们没有正确编码 非土耳其维基读者的观点。
希望它会有所帮助。
答案 1 :(得分:1)
从上面的回答中,我能够在代码中找到具有正确方法的link。
我还必须使用NSWindowsCP1254StringEncoding
保存文件并使用windows-1254
标题中的meta
字符集。