作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道为什么Data.ByteString.Lazy.putStrLn
已弃用,但Data.ByteString.Lazy.putStr
和 Data.ByteString.Lazy.hPutStr
是
不是?
-- | A synonym for @hPut@, for compatibility
--
hPutStr :: Handle -> ByteString -> IO ()
hPutStr = hPut
-- | Write a ByteString to stdout
putStr :: ByteString -> IO ()
putStr = hPut stdout
-- | Write a ByteString to stdout, appending a newline byte
--
putStrLn :: ByteString -> IO ()
putStrLn ps = hPut stdout ps >> hPut stdout (singleton 0x0a)
{-# DEPRECATED putStrLn
"Use Data.ByteString.Lazy.Char8.putStrLn instead. (Functions that rely on ASCII encodings belong in Data.ByteString.Lazy.Char8)"
#-}
-- | The interact function takes a function of type @ByteString -> ByteString@
-- as its argument. The entire input from the standard input device is passed
-- to this function as its argument, and the resulting string is output on the
-- standard output device.
Data.ByteString.Lazy.putStr myString >> System.IO.putStrLn ""
.Char8
变体感觉有点危险。
最佳答案
已弃用的 putStrLn
假设它知道如何编码 '\n'
特点。您列出的其他函数都没有假设任何有关编码的内容;他们只是传递你传递给他们的字节。 (您的工作是确保这些字节对于您打算使用的编码是正确的。)我同意 .Char8
模块不是那么热——它使用 latin1
整个编码,没有通过 21 世纪的测试。你考虑这个代码:
ByteString.putStr myString >> System.IO.putStrLn ""
myString
的编码之间存在不匹配。以及
System.IO.putStrLn
的编码正在使用。相反,请确保
myString
最后有一个编码的换行符。
关于string - 什么是已弃用的 `Data.ByteString.Lazy.putStrLn` 的更安全和正确的替代方案,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28965426/
我是一名优秀的程序员,十分优秀!