Получение оптимальной кодировки
Я хочу сохранить строку юзера(которую он введёт) в текстовый файл, но при этом использовать оптимальную кодировку. То есть сделать enum из кодировок, а потом в файл первым байтом записывать index enum'а, а далее уже саму строку в оптимальном кодировке, чтобы файл занимал минимальное количество байт
Ответы (1 шт):
Перебираем все имеющиеся кодировки.
Получаем массив байт из строки.
Проверяем, что обратное преобразование выполняется корректно.
Выбираем минимальный размер массива.
string s = "こんにちは";
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var x = Encoding.GetEncodings()
.Select(info => info.GetEncoding())
.Select(enc => new { Encoding = enc, Bytes = enc.GetBytes(s) })
.Where(x => x.Encoding.GetString(x.Bytes) == s)
.MinBy(x => x.Bytes.Length);
Console.WriteLine(x.Encoding);
Теперь как-то сохраняем строку в файл.
x.Bytes уже содержит массив байтов в нужной кодировке. Можно использовать их напрямую.
По умолчанию в последних версиях дотнета подключено мало кодировок (только основные). Если нужны все, то раскомментируйте Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Следует учитывать, что на разных компьютерах могут быть установлены разные кодировки. Поэтому не следует использовать редкие.
PS: Не забываем про BOM!