像「\ 1234 \ 5678」這樣的字符串輸出實際上只有兩個字符長 - 數據被保留,但您需要正確解釋它。可能最好的方法是使用Text
,而不是列表Char
s,實際上是一個表示UTF-8碼點的字節數組。
爲此,您需要在HTTP mkRequest :: BufferType ty => RequestMethod -> URI -> Request ty
中使用稍微更一般的接口。 Text
不直接實例化BufferType
,所以我們將通過ByteString
,它代表數據的二進制塊 - 它沒有對該數據編碼的特定解釋。
然後我們可以使用decodeUtf8
到原始字節轉換爲UTF-8 Text
import Data.Text
import Data.Text.Encoding
import Data.ByteString
\ uri -> do
rawData <- getResponseBody =<< simpleHTTP (mkRequest GET uri) :: IO Text
return (decodeUtf8 rawData)
注意decodeUtf8
是局部的,它可能在強制重新啓動或處理程序不能在純代碼捕獲的方式失敗一直在你的IO堆棧中。如果這是不可取的,如果您很有可能下載的文本不是有效的UTF-8,那麼您可以使用decodeUtf8'
返回Either
。
你能給出一個完整的示例程序,其中包含一個顯示行爲的URL嗎?這會讓其他人更容易向你展示工作代碼。 –