无法从某些网站读取html

无法从某些网站读取html,html,http,haskell,encoding,web-scraping,Html,Http,Haskell,Encoding,Web Scraping,这导致了奇怪的编码 runMaybeT $ openUrl "http://kickass.to" …223\250ns\147\214\203\235`\188\&0f\SO\182vw\v\200\&0m\195\181\143CY[\223\ETB\n\175\209\240\155\160\240\157\248\189x\231Xa\239\187\194\DEL$\SI\144S\SYN\210\t\DEL\DC2\213\129\DLE\FS\153这将正确下

这导致了奇怪的编码

runMaybeT $ openUrl "http://kickass.to"

…223\250ns\147\214\203\235`\188\&0f\SO\182vw\v\200\&0m\195\181\143CY[\223\ETB\n\175\209\240\155\160\240\157\248\189x\231Xa\239\187\194\DEL$\SI\144S\SYN\210\t\DEL\DC2\213\129\DLE\FS\153这将正确下载内容:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="Content-Style-Type" content="text/css"/>
...
<script src="//kastatic.com/js/all-df6d9f0.js" type="text/javascript"></script>
....
import Data.conductor.Binary(sinkFile)
导入Network.HTTP.conductor
导入符合条件的数据。导管为C
main::IO()
main=do
乌里多

响应我不这么认为这是Haskell代码的问题。对
kickass.to
执行
curl会导致同样的问题。@Sibi我在web开发方面没有经验。像这样编码html是常见的吗?这是一个压缩html,http协议支持压缩内容。我想你需要解析响应头和手动解压缩内容。
runMaybeT $ openUrl "http://kickass.to"
....223\250ns\147\214\203\235`\188\&0f\SO\182vw\v\200\&0m\195\181\143CY[\223\ETB\n\175\209\240\155\160\240\157\248\189x\231Xa\239\187\194\DEL$\SI\144S\SYN\210\t\DEL\DC2\213\129\DLE \FS\153<\178\135a\239{\246**7y\246:z2t\238m\151\191\181\181\245]\225\205\168\240\221\195^~\186\&8\221\162q\191\233\205\254\198O\225\SYN\233\170\228\ETX\CANt7\203\219\141\&2\175\167\240\221\153\DC1\246\138p\205#\237\250&/\191\193\143\ESColDg\211\&6N1\199\200\128\199\231\&8\154\218\182\231#\"bw\163\188\193\248\b\249'14\250\184\183\243\191 \GS\DC4\182\216\171R\t\130\219\204n O\251\EOT7\206v\176\237mw\183\253mc\187\SI\DLE1\231j\ETX\SOH\130]\215\222G\188\223\CANg\164\131\143mJD\181q\189\235\191q\174\252\235]\250\231_\255z\128\188MzZ\252\133\255X\252\229_\255\186\186\222\DC24\SYNA\DEL\FS\135\193\214\239\219\252\GSwW\253\SI\n#=\130\144\131\237j\236\ACK\SI \234mm\163\139}<\207\EOT\133\183Eh0\138\FS\158\187*>\209\161\238\238\155\254\\x\208\200P#\208\129\204\210\136\175\217\142\247\214vL\r\182\177/)0\ACK)11r\197\136\135\206#\196&\223\NUL\223\237\141\174\SOH\226A'W\186\198\230\134 .D\214?\237+\NAK\181Q%f\166\168\244`*\186 z\GS\183\167q\139\239\DLE\241\DC4\184Z\253\142jJ-P\169\141\203\215I\212\166\251\130\247\254\US\235\RS\156\238\236Z\SOH\NUL....
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="Content-Style-Type" content="text/css"/>
...
<script src="//kastatic.com/js/all-df6d9f0.js" type="text/javascript"></script>
....
import Data.Conduit.Binary (sinkFile)
import Network.HTTP.Conduit
import qualified Data.Conduit as C

main :: IO ()
main = do
     uri <- parseUrl "http://kickass.to"
     let request = uri {
           decompress = browserDecompress
                       } 
     withManager $ \manager -> do
         response <- http request manager
         responseBody response C.$$+- sinkFile "kickass.html"