(* BOM (Byte Order Mark) sniffing *) let sniff data = let len = Bytes.length data in if len >= 3 && Bytes.get data 0 = '\xEF' && Bytes.get data 1 = '\xBB' && Bytes.get data 2 = '\xBF' then Some (Encoding_types.Utf8, 3) else if len >= 2 && Bytes.get data 0 = '\xFF' && Bytes.get data 1 = '\xFE' then Some (Encoding_types.Utf16le, 2) else if len >= 2 && Bytes.get data 0 = '\xFE' && Bytes.get data 1 = '\xFF' then Some (Encoding_types.Utf16be, 2) else None