土耳其文字的HTML不在UIWebview中显示

时间:2015-11-09 10:38:50

标签: javascript html ios objective-c uiwebview

我的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字符串。

欢迎来自此处的任何建议。

感谢。

2 个答案:

答案 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字符集。