HTTP头中不存在编码,如何在HTML头中找到它?(iPhone)

HTTP头中不存在编码,如何在HTML头中找到它?(iPhone),iphone,html,encoding,content-type,Iphone,Html,Encoding,Content Type,我正在为iPhone编写浏览器 我正在使用 NSString* storyHTML = @""; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request startSynchronous]; 下载HTML。问题是HTTP头中有时没有编码,在这种情况下,上述代码默认为拉丁ISO 在本例中,我可以读取HTML中的标题,并找到指定实际编码的元标记。看起来是这样的: <meta http-equiv="con

我正在为iPhone编写浏览器

我正在使用

NSString* storyHTML = @"";
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
下载HTML。问题是HTTP头中有时没有编码,在这种情况下,上述代码默认为拉丁ISO

在本例中,我可以读取HTML中的标题,并找到指定实际编码的元标记。看起来是这样的:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
必须有一个类来确定HTML的编码方式。有没有办法查看UIWebView并了解他们是如何做到的

似乎下载HTML应该很容易,我遗漏了什么

谢谢

有没有办法查看UIWebView并了解他们是如何做到的


UIWebView
是一个包装器,它是一个开源项目。你可以下载源代码,也可以在线下载。

我只想总结一下我的评论,并在答案中添加最后几句建议


评论1: 根据一般用法,您可以使用
ASIHTTPRequest
-responseString,否则您可以使用数据本身并使用自己的逻辑来确定编码类型(UTF8、UTF16等)


评论2: 从ASITP网站:

ASIHTTPRequest将尝试从内容类型标头读取接收数据的文本编码。如果找到文本编码,它会将responseEncoding设置为相应的NSStringEncoding。如果在标题中找不到文本编码,它将使用defaultResponseEncoding的值(默认为NSISolatin1StringCodeing)。>当调用[request responseString]时,ASIHTTPRequest将尝试使用responseEncoding作为源编码,从接收到的数据创建字符串


评论3 另见:



我个人建议获取响应数据,并假设内容可以放入UTF16(或8)。当然,您也可以使用正则表达式或HTML解析器获取
元素中的
标记,但是如果响应是一种奇怪的内容类型,那么您可能无法找到字符串
@“您为什么关心编码?从我使用的情况来看,ASIHTTPRequest非常方便,如果您只使用请求的
响应字符串
(作为HTML),应该不会有任何问题。您可以直接将这个字符串传递到UIWebView中,等等。因为HttpRequest并不适用于所有网站。例如,此站点:在HTTP头中没有编码,但在HTML头中有编码。结果是有几个字符搞错了。但是,如果将UIWebView直接发送到URL,则可以正确处理它。我希望我知道他们是怎么做到的…根据ASIHTTPRequest的网站:>“ASIHTTPRequest将尝试从内容类型标头读取接收数据的文本编码。如果找到文本编码,它会将responseEncoding设置为相应的NSStringEncoding。如果在标题中找不到文本编码,它将使用defaultResponseEncoding的值(默认为NSISolatin1StringCodeing)。>当调用[request responseString]时,ASIHTTPRequest将尝试使用responseEncoding作为源编码,从接收到的数据创建字符串。“还可以看到,这似乎仍然不能解决问题。引用中提到,他们正在HTTP头中查找内容类型,而不是HTML头。有些站点在HTML标头中包含内容类型,但在HTTP标头中不包含内容类型。在本例中,ASIHTTPRequest需要一些其他代码来检查HTML头。另一篇文章中的建议是默认UTF-8。。。这是个不错的主意,因为看起来大多数站点可能是UTF-8而不是NSISOLatin1,但不是一个完美的解决方案。。。另外,我也很感谢你的反馈。谢谢。是的,我认为不遵守UTF-8应该没问题。这是一个在HTTP头中似乎没有编码但在HTML头中有编码的站点:
 enum {
   NSASCIIStringEncoding = 1,
   NSNEXTSTEPStringEncoding = 2,
   NSJapaneseEUCStringEncoding = 3,
   NSUTF8StringEncoding = 4,
   NSISOLatin1StringEncoding = 5, ...