0

我想通过Qt或PyQt获取网页源代码,我知道如何获取编码的源代码,然后我需要获取编解码器才能将其转换为纯文本,所以问题是如何检测字符编码以编程方式创建网页?有人可以帮忙吗?

此页面由 UTF8 编码 http://www.flvxz.com/getFlv.php?url=aHR0cDojI3d3dy41Ni5jb20vdTk1L3ZfT1RFM05UYzBNakEuaHRtbA==

这个是gb2312编码的

http://www.qnwz.cn/html/yinlegushihui/magazine/2013/0524/425731.html

你的答案应该在这 2 页上测试

4

2 回答 2

0

您可以使用QTextCodec::codecForHtml静态函数。

尝试通过检查 BOM(字节顺序标记)和内容类型元标头来检测给定字节数组 ba 中提供的 HTML 片段的编码,并返回能够将 html 解码为 un​​icode 的 QTextCodec 实例。如果无法从提供的内容中检测到编解码器,则返回 defaultCodec。

这不适用于没有编码元标记的页面。例如,您发布的第一个链接没有编码标记(这不是 HTML,因此不能有任何标记),编码是在名为“Content-type”的 HTTP 标头中指定的。你需要检查它的值。QHttpHeader::contentType如果您使用 Qt 下载页面,则可以使用它来检索它。

于 2013-06-08T19:01:00.830 回答
0


最后,我发现通过使用PyQt的QtextStream、QTextCodec和chardet,即使是这个糟糕的页面 ,我们也可以更安全地获取网页代码http://www.qnwz.cn/html/yinlegushihui/magazine/2013/0524/425731.html

这个脚本 http://www.flvxz.com/getFlv.php?url=aHR0cDojI3d3dy41Ni5jb20vdTk1L3ZfT1RFM05UYzBNakEuaHRtbA==

此页面在其源代码中没有 chardet http://msdn.microsoft.com/en-us/library/bb802962(v=office.12).aspx

代码见这里 https://groups.google.com/d/msg/comp.lang.python/8_1oNMidxzE/zMztIlE3mAYJ

于 2013-06-09T11:50:05.493 回答