像“\1234\5678”这样的字符串输出实际上只有两个字符长——数据被保留了,但您需要正确解释它。可能最好的方法是使用Text
which 而不是Char
s 的列表,实际上是一个表示 UTF-8 代码点的字节数组。
为此,您需要在 HTTP 中使用稍微更通用的接口mkRequest :: BufferType ty => RequestMethod -> URI -> Request ty
。Text
不直接实例化BufferType
,所以我们将通过ByteString
,它表示二进制数据块——它对该数据的编码没有特别的解释。
然后我们可以使用decodeUtf8
将原始字节转换为 UTF-8Text
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'
which 返回一个Either
.