Итак, мой код, который получает все известные преамбулы, теперь выглядит так:
var preambles = new Dictionary<string, byte[]>();
foreach (var encodingInfo in Encoding.GetEncodings()) {
Encoding encoding = Encoding.GetEncoding(encodingInfo.Name);
var preamble = encoding.GetPreamble();
if (preamble != null && preamble.Length > 0)
preambles.Add(encodingInfo.Name, preamble);
}
Оказывается, их не так много
utf-16 [2] 255 254
unicodeFFFE [2] 254 255
utf-32 [4] 255 254 0 0
utf-32BE [4] 0 0 254 255
utf-8 [3] 239 187 191
Таким образом, я могу написать код, который безопасно преобразует байтовый массив с необязательной преамбулой в строку, просто предоставив кодировщик по умолчанию для тех, у которых нет преамбулы. Yay