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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

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

29.05.2013, 10:47. Просмотров 4543. Ответов 13
Метки нет (Все метки)

Допустим, программа будет обрабатывать некий текстовый файл с зарание неизвестной кодировкой. Как можно на С++ программно правильно определить этот тип кодировки для последующей правильной обработки текста? В идеале, было бы неплохо написать функцию, которая принимает на вход имя файла и возвращает тип его кодировки. Кто нибудь такое делал? И, кстати, как Notepad++ это делает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 10:47     Как определить кодировку файла?
Посмотрите здесь:

Как распознать кодировку текста при вводе из файла? - C++
Имеется файл с текстом, написанный в каком-то текстовом редакторе на каком-то человеческом языке. Программа должна считывать этот...

Придумать свою кодировку файла - C++
Добрый день. Понятия не имею, как это сделать. Подскажите, пожалуйста. Пусть есть текстовый файл некоторого размера. Придумать свою...

Как поменять кодировку? - C++
Здравствуйте. У меня есть строка с непонятной кодировкой. string str="╨Ф╨╛╨▒╤А╤Л╨╣ ╨▓╨╡╤З╨╡╤А"; //Добрый вечер Пробовал использовать...

Как изменить кодировку вывода? - C++
Доброе утро всем. Помогите новичку. Только начал изучать программирование на С++ (в среде Visual Studio 2008 express), и столкнулся с...

Как изменить кодировку символов - C++
Приветствую уважаемые форумчане, помогите пожалуйста с кодировками , в файл вместо ФИО записывает краказябры. Заранее благодарю. ...

Как на сервере задать кодировку символов - C++
Спасибо еще такой вопрос у меня есть tcp сервер на него с клиента приходят русские сообщения и в буфере на сервере получаются непонятные...

Как задать кодировку для TextOut? - C++
Как задать кодировку для TextOut?

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

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

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

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

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

Не согласен?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 12:47     Как определить кодировку файла? #11
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет
Приведенный на рисунке алгоритм опирается именно на визуальное представление текста. Т.е. он уже должен так или иначе отображаться (в какой-то кодировке). Есть еще в инете страничка "Перекодировщик писем Лебедева". Может оттуда удастся что-то подчерпнуть. Хотя сомневаюсь.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2013, 13:00     Как определить кодировку файла? #12
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет, а считать сырой текст в string и дальше передать ее в нужную функцию, пускай она определяет.
Я и пишу, что не получится без пользователя. Или в тексте должно быть известный набор символов, по кодировке которых можно ориентироваться.
DiffEreD
1429 / 766 / 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     Как определить кодировку файла?
Еще ссылки по теме:

Как подключить кодировку IBMcp866 в среде wxDev-C++ ? - C++
Подскажите как подключить кодировку IBMcp866. Есть мысль что так: setlocale(LC_ALL, ".866"; Правильно ли это?

Как задать кодировку для заголовка окна? - C++
#include<iostream> #include<windows.h> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); ...

Как определить тип файла? - C++
Хочу написать программу, которая из кучи различных файлов в папке удаляет файлы определённого типа, но вот проблема возникла, не знаю как...

Как определить конец файла? - C++
В файле лежит одно число, которое нужно проверить на делимость на 11. Число большое-до 10^10000. Попробовал сделать так: #include...

Как узнать кодировку полученной строки аргумента main? - C++
В main отправляется аргумент-строка на русском из IDE CLion v 2016.2.3. Вывести этот аргумент на русском не получается, какую кодировку...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru