Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Не согласен?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 12:47 #11
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет
Приведенный на рисунке алгоритм опирается именно на визуальное представление текста. Т.е. он уже должен так или иначе отображаться (в какой-то кодировке). Есть еще в инете страничка "Перекодировщик писем Лебедева". Может оттуда удастся что-то подчерпнуть. Хотя сомневаюсь.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2013, 13:00 #12
Цитата Сообщение от yuron_477 Посмотреть сообщение
Пользователь может и не смотреть есть ли кракозябры или нет, а считать сырой текст в string и дальше передать ее в нужную функцию, пускай она определяет.
Я и пишу, что не получится без пользователя. Или в тексте должно быть известный набор символов, по кодировке которых можно ориентироваться.
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.05.2013, 13:21  [ТС] #13
Еще тогда такой вопрос, - а как тогда notepad++ определяет тип кодировки, откуда программа знает что этот файл в UCS-2 Little Endian кодировке, а другой в UTF-8 без BOM? Какой там алгоритм?
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 13:36 #14
никак он не узнает. нет в нем функции определения кодировки. Есть функция кодирования в любой из перечисленных, но не выяснения оной
0
29.05.2013, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 13:36
Привет! Вот еще темы с ответами:

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

Как подключить кодировку 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++
Хочу написать программу, которая из кучи различных файлов в папке удаляет файлы определённого типа, но вот проблема возникла, не знаю как...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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