Кодировка КОИ7н2 и кодирования в c#
Есть файлы в кодировке Кои-7н2 вида :
Приходят такие же файлы ещё и в кодировке 1251:
Когда пытабюсь открыть в c# файлы в кодировке кои 7н, выдаёт всякую ерунду, а должен выдавать символы, как в 1251.
Попытался конвертировать, уже всё перепробовал, может есть у кого идеи?
Мой отчаянный код:
foreach (var sourceEncoding in Encoding.GetEncodings())
{
foreach (var targetEncoding in Encoding.GetEncodings())
{
//Русские AAXX и англ AAXX
if (targetEncoding.GetEncoding().GetString(text).Contains("AAXX") || targetEncoding.GetEncoding().GetString(text).Contains("ААХХ"))
{
Console.WriteLine($" {sourceEncoding.CodePage} - {targetEncoding.GetEncoding().GetString(text)} - {targetEncoding.CodePage}");
}
}
}
Пример файлов: https://drive.google.com/drive/folders/189JmQQChiqJcTGEUrP6gbXfufnGA0y9x?usp=sharing
Ответы (1 шт):
У вас зачем-то выставлен старший бит много где в файле, между тем в KOI-7 так быть не может - он 7-битный, как видно из названия. Я просто отрезал старший бит - и всё стало прекрасно показываться даже в UTF-8. Исходник приведу на Питоне, мне так проще, на C# перевести, думаю, не проблема:
with open('22-10-2020_06-06-15.029848', 'rb') as f:
buffer = f.read()
for i in range(len(buffer)):
print(chr(buffer[i] & 0x7f), end='')
Вывод:
AAXX 22061 29848 42598 82205 10137 21035 39740 40059 52006 885// 333 91112=
Обновлено: Добавил C#
byte[] data = File.ReadAllBytes("22-10-2020_06-06-15.029848");
for (int i = 0; i < data.Length; i++)
data[i] = (byte)(data[i] & 0x7f);
string text = Encoding.UTF8.GetString(data);

