从Haskell ByteString中删除B​​OM的最简单方法

时间:2017-11-18 15:29:09

标签: haskell character-encoding byte-order-mark bytestring

我有LazyByteString,可能以BOM开头。从ByteString移除BOM的最简单,最有效的方法是什么?

1 个答案:

答案 0 :(得分:6)

我觉得我一定是在误解这个问题。这不归结为检查字节串的前三个字节并有条件地丢弃这些字节吗?

  • 要获取前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等软件包。也许你可以用另一种方式解决你的问题,而不是手动修改字节串。