Форум программистов, компьютерный форум CyberForum.ru

Как определить кодировку файла? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 10:47     Как определить кодировку файла? #1
Допустим, программа будет обрабатывать некий текстовый файл с зарание неизвестной кодировкой. Как можно на С++ программно правильно определить этот тип кодировки для последующей правильной обработки текста? В идеале, было бы неплохо написать функцию, которая принимает на вход имя файла и возвращает тип его кодировки. Кто нибудь такое делал? И, кстати, как Notepad++ это делает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 10:47     Как определить кодировку файла?
Посмотрите здесь:

Как изменить кодировку вывода? C++
C++ Как определить конец файла?
Как задать кодировку для TextOut? C++
C++ Как определить размер открытого файла
Как поменять кодировку? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.05.2013, 11:07     Как определить кодировку файла? #2
yuron_477, насколько я знаю, кодировка определяется на основании анализа файла и вычисления статистики по встречающимся символам. Т.е. задача совсем не тривиальная. Это конечно если отсутствует описатель BOM в файле.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 11:24  [ТС]     Как определить кодировку файла? #3
Цитата Сообщение от Tulosba Посмотреть сообщение
кодировка определяется на основании анализа файла и вычисления статистики по встречающимся символам
Это понятно что надо какой то анализ провести. Мне бы код увидеть. Может уже есть такие готовые функции, может в бусте уже такое есть?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 11:27  [ТС]     Как определить кодировку файла? #4
Вот нашел на одном ресурсе алгоритм (фото), но пока не знаю как к этому приступить.
Миниатюры
Как определить кодировку файла?  
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 11:42     Как определить кодировку файла? #5
а какого рода обработка? зачем знать кодировку файла?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 11:51  [ТС]     Как определить кодировку файла? #6
Чисто в учебных целях для самообразования. Обработка такая - просто вывести юникод с файла на консоль без "крякозябр" и вывести исходную кодировку файла.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 12:19     Как определить кодировку файла? #7
yuron_477, картинка выше похожа на детский лепет, если честно.

Добавлено через 9 минут
Странное желание. Что такое кодировка? Чтобы выяснить её ты как минимум должен знать какое множество символов некоего алфавита закодировано в файле. Русский ли, китайский, и т.д.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2013, 12:33     Как определить кодировку файла? #8
Цитата Сообщение от yuron_477 Посмотреть сообщение
Вот нашел на одном ресурсе алгоритм (фото), но пока не знаю как к этому приступить.
Как этот алгоритм в коде сделать, если первый пункт - "Как выглядят кракозябры?" Кто должен смотреть? Пользователь? Тогда можно просто перебирать кодировки, пока не появится правильный текст.
Это, с таким алгоритмом, не получится сделать:
Цитата Сообщение от yuron_477 Посмотреть сообщение
В идеале, было бы неплохо написать функцию, которая принимает на вход имя файла и возвращает тип его кодировки
По-моему, всё упирается в то, как выглядит код символа, в этом суть кодировки. Значит без пользователя, в этом деле, не обойтись.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 12:39  [ТС]     Как определить кодировку файла? #9
Рисунок этот не я делал, просто в нете нашел. Пользователь может и не смотреть есть ли кракозябры или нет, а считать сырой текст в string и дальше передать ее в нужную функцию, пускай она определяет.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 12:46     Как определить кодировку файла? #10
yuron_477, никто не говорит, что это твоя картинка, там хабразначек видно)

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

Если неясно, проведу параллель, что, думаю, прояснит ситуацию.
Имеем файл, закодированный одним из следующих шифров: DES, tripple DES, DES PCBC-mode, ГОСТ, банальный xor...можно продолжить

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

Не согласен?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.05.2013, 12:47     Как определить кодировку файла? #11
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет
Приведенный на рисунке алгоритм опирается именно на визуальное представление текста. Т.е. он уже должен так или иначе отображаться (в какой-то кодировке). Есть еще в инете страничка "Перекодировщик писем Лебедева". Может оттуда удастся что-то подчерпнуть. Хотя сомневаюсь.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2013, 13:00     Как определить кодировку файла? #12
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет, а считать сырой текст в string и дальше передать ее в нужную функцию, пускай она определяет.
Я и пишу, что не получится без пользователя. Или в тексте должно быть известный набор символов, по кодировке которых можно ориентироваться.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 13:21  [ТС]     Как определить кодировку файла? #13
Еще тогда такой вопрос, - а как тогда notepad++ определяет тип кодировки, откуда программа знает что этот файл в UCS-2 Little Endian кодировке, а другой в UTF-8 без BOM? Какой там алгоритм?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 13:36     Как определить кодировку файла?
Еще ссылки по теме:

Как определить разделить при чтении из файла C++
C++ Как распознать кодировку текста при вводе из файла?
Как задать кодировку для заголовка окна? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 13:36     Как определить кодировку файла? #14
никак он не узнает. нет в нем функции определения кодировки. Есть функция кодирования в любой из перечисленных, но не выяснения оной
Yandex
Объявления
29.05.2013, 13:36     Как определить кодировку файла?
Ответ Создать тему
Опции темы

Текущее время: 20:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru