Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Надо определить в какой кодировке


Автор: Puoar 8.12.2007, 09:54
Как определить в какой закодирован анси или аски 

Автор: ksili 8.12.2007, 12:03
По-моему в готовом виде такая инфа нигде не содержится. Можно использовать частотный анализ, чтобы определить с некоторой вероятностью

Автор: Cycle 8.12.2007, 23:15
ksili правильно говорит, что нужно использовать частотный анализ. Если речь идет о тексте на русском, то достаточно посчитать частоту появления буквы "а" (достаточно часто употребляемая) в одной кодировке и другой и на основании этого делать выводы. Если речь идет о более сложной ситуации, то лучше хранить среднюю частоту каждого символа и делать кореляционный анализ.

Второй метод, который прокатил в моем случае, заключается в проверке на недопустимость каки-либо символов. Например символ с кодом 0xA0 в ДОСе - это символ "а", а в кодировке Виндовс - это неразрывный пробел. Неразрывный пробел врядли можно встретить в БД, на этом основании я делал, вывод, какая это кодировка.

В любом случае все эти способы не дают 100% гарантии, особенно на маленьких объемах текста, поэтому я бы оставил пользователю возможность исправить ошибку. Удачи.

Автор: ksili 10.12.2007, 05:47
По-моему в русском языке самая часто встречающаяся буква - 'о'. Есть конечно вычисленные частоты встречаемости символов в различных языках (и даже для разных стилистик текста), которые справдливы для больших текстов. Но можно анализировать не по частотам всех символов, а по некоторым наиболее часто встречающимся. Для того чтобы запомнить такие символы есть специальные фразы.
В русском языке - ЛИТР НА СЕНОВАЛЕ
В английском - HONDA TETRIS
все буквы в этих словах являются наиболее встречающимися

Автор: Puoar 15.12.2007, 08:33
Спасибо всем кто ответил! Нда я думал есть способы поконкретней. Неужели в разных блокнотах используются эти методы.. :]

Автор: Puoar 15.12.2007, 10:40
Ёпрст

Автор: ksili 16.12.2007, 09:17
Цитата(Puoar @  15.12.2007,  12:33 Найти цитируемый пост)
Неужели в разных блокнотах используются эти методы

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

Автор: jonie 17.12.2007, 01:15
фалы с UTF8 часто маркируются двумя байтами вначале.
для UCS-2 два байта на символ. один из символов - указатель алфавита, притом что анг - 0, рус - тоже входит в "служебную часть байтов"
а так - частотный анализ. Тупо взять словарь даля, составить частотые характеристики и дальше думать)... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)