Определите кодировку файлов для больших файлов в SSIS / C# - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть очень большие текстовые файлы, которые импортируются через SSIS в нашу базу данных. Эти файлы поступают от сотен компаний и различных исходных систем. Большинство этих файлов хорошо импортируются с кодовой страницей 1252, но в некоторых файлах, спрятанных где-то в одной из строк, могут быть некоторые странные символы, которые не помещаются в кодовую страницу 1252.

I ' Мы реализовали решение, основанное на этом SO-ответе , которое позволяет мне перейти к кодовой странице 1252 по одному пути, если кодировка файла ANSI / ASCII, ИЛИ он может go по другому пути с кодом 65001 стр. Это, кажется, работает во многих случаях, но недостаточно надежно, чтобы мы могли использовать его в производстве.

using(var r = new StreamReader(filename, Encoding.Default))
{
    richtextBox1.Text = r.ReadToEnd();
    var encoding = r.CurrentEncoding;
}

Я далеко не эксперт по кодированию файлов, но я предполагаю, что это потому, что он читает только определенную часть файла и, если все выглядит как символы ANSI, он будет считать, что это ANSI (эти файлы почти гарантированно не имеют спецификации)?

Нужно ли мне читать весь файл в память и проверять каждый символ, чтобы получить наиболее точную кодировку файла? Как я могу сделать это, когда чтение очень большого файла в память может вызвать огромные проблемы?

Есть ли способ выполнить это sh с разумным уровнем уверенности? Мне не нужно учитывать какие-либо иностранные языки, так как все они - Engli sh, но мы столкнулись со случайным странным персонажем, включенным в эти файлы. Я думаю, нам нужно разрешить ASCII, UTF-8 и UTF-16.

Есть ли способ просто определить, использовать ли кодовую страницу 1252 или 65001 в SSIS?

В соответствующей заметке, если ASCII является подмножеством UTF-8, почему при импорте ВСЕХ файлов в виде кодовой страницы 65001 некоторые символы не переводятся правильно? Разве UTF-8 не должен работать для всего, если он включает ASCII?

...