从 Haskell ByteString 中删除 BOM 的最简单方法
Simplest way to remove BOM from Haskell ByteString
我有LazyByteString
which possibly starts with BOM。从此 ByteString
中删除 BOM 的最简单且更有效的方法是什么?
我觉得我一定是理解错了问题。这不归结为检查字节串的前三个字节并有条件地删除这些字节吗?
- 要获取前 3 个字节,请使用
take
。
- 要检查字节串是否相等,请使用
(==)
.
- 要删除前 3 个字节,请使用
drop
。
将这些放在一起我们得到:
import Data.ByteString.Lazy as BS
dropBOM bs | BS.take 3 bs == BS.pack [0xEF,0xBB,0xBF] = BS.drop 3 bs
| otherwise = bs
然而,即使在处理了大量的 utf8 之后,我也从未觉得我需要明确处理 BOM,这要归功于像 Text 这样的包提供了大多数所需的操作。也许你可以用另一种方式解决你的问题,而不是手动修改字节串。
我有LazyByteString
which possibly starts with BOM。从此 ByteString
中删除 BOM 的最简单且更有效的方法是什么?
我觉得我一定是理解错了问题。这不归结为检查字节串的前三个字节并有条件地删除这些字节吗?
- 要获取前 3 个字节,请使用
take
。 - 要检查字节串是否相等,请使用
(==)
. - 要删除前 3 个字节,请使用
drop
。
将这些放在一起我们得到:
import Data.ByteString.Lazy as BS
dropBOM bs | BS.take 3 bs == BS.pack [0xEF,0xBB,0xBF] = BS.drop 3 bs
| otherwise = bs
然而,即使在处理了大量的 utf8 之后,我也从未觉得我需要明确处理 BOM,这要归功于像 Text 这样的包提供了大多数所需的操作。也许你可以用另一种方式解决你的问题,而不是手动修改字节串。