C #: Как-узнать, есть ли у меня правильная кодировка - PullRequest
5 голосов
/ 26 января 2012

Я довольно новичок в файлах, потоках и различных кодовых страницах.Смотри, это моя проблема:

Я получаю текстовые файлы, и некоторые из них были созданы с кодовой страницей Windows-1252, некоторые все еще IBM850, а иногда и UTF8.Когда я импортирую их, моя база данных показывает все виды символов для ä, ö, ü, ß, потому что я читаю их с неправильной кодовой страницей.только когда я импортирую их с правильной кодовой страницей, все работает нормально.

Это то, что я подумал, может быть хорошим подходом:

Конвертировать массивы ä, ö, ü, ß в байты скодовая страница X

например:

byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä");

byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä");

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

Вот чего я не понимаю: как я могу сравнить байты из букв в текстовом файле с байтовыми массивами искомых букв.Например:

if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr)
...

Есть ли другой способ получить правильную кодовую страницу?Правильный ли у меня подход к решению?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

К сожалению, нет надежного метода, поскольку определенный поток байтов может иметь смысл в более чем одной кодировке.

Один из способов сделать это - использовать догадки и эвристику с использованием других бизнес-данных.Можете ли вы вывести кодировку из имени файла?Из каких-то других метаданных, таких как имя отправителя?Если это так, попробуйте выполнить фильтрацию, используя это.

Если нет, вы можете попробовать откопать и угадать.Если файлы могут быть большими, как вы говорите, просто посмотрите и введите образец текста (скажем, первые 512 байт, этого должно быть достаточно).Есть ли у вас какой-либо способ угадать, каким может быть содержание?Это свободный текст на английском / иврите или что-то в этом роде?Если так, ищите общие слова в 512-байтовом образце.Файлы содержат фиксированный формат?Если так, ищите это.Затем запустите эти тесты на реальных образцах, посмотрите результаты, настройте тесты и попробуйте снова, пока у вас не будет сравнительно хороших шансов для распознавания кодировки.

Удачи!

0 голосов
/ 26 января 2012

Я бы попытался загрузить файл с одной кодировкой, а если я столкнулся с неожиданными символами, загрузил его с другой.

...