Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2015, 08:46   #1
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию Автораспознавание кодировки

Здравствуйте. Хотелось бы в своей программе реализовать поддержку для АВТОопределения различных возможных текстовых кодировок, например так, как это происходит в небезызвестном текст. блокноте AkelPad, ну или Word.. Собственно, саму поддержку конвертирования при открытии и сохранении в оба направления уже сделал.. Но выбирать при открытии файла , каждый раз вручную, из множества системых кодировок нужную (ту, которой закодирован файл), как-то утомительно.
Можно ли как-то автоматизировать сей процесс, скажем, подключением какой-либо сторонней библиотеки для этих целей, если такая есть. Наподобии iconv.dll, но специализирущейся именно на автораспознавании? Сам функционал iconv.dll уже сделал программно. Или же все придется ручками писать..
Foxpronet вне форума Ответить с цитированием
Старый 13.04.2015, 09:56   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

анализируете первых 5-10 символов текста на принадлежность. Побеждает большинство.
Человек_Борща вне форума Ответить с цитированием
Старый 13.04.2015, 10:32   #3
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Foxpronet Посмотреть сообщение
Можно ли как-то автоматизировать сей процесс
В общем случае невозможно, только эмпирики ( http://blogs.msdn.com/b/oldnewthing/...7/2158334.aspx ).
Всякие приведения к UTF-8 могут доложить вам о том, что конверсия провалилась или обнаружены некорректные последовательности (там по стандарту что-то типа EF-BF-BD лепится штоле).
StriderX вне форума Ответить с цитированием
Старый 13.04.2015, 12:34   #4
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию Распознавание кодировки

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
анализируете первых 5-10 символов текста на принадлежность. Побеждает большинство.
Если не ошибаюсь, при таком подходе высока вероятность лжекодировки. Или вы о другом, можно подробней?
Вообще хотелось бы, конечно, некий dll аналог или готовый универсальный / несовсем модуль, если существует (наверняка есть, вопрос ведь достаточно актуальный, но найти так и не смог пока). Времени просто не так много...
Ну коли нет готового.. Что ж, будем писать.
Foxpronet вне форума Ответить с цитированием
Старый 13.04.2015, 12:51   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Самое простое -- попытка раскодировать текст как UTF-8, а если не получилось, считать его некой legacy-кодировкой, значение которой берется из настроек или системного окружения. В юникодных версиях Delphi это значение хранится в системной переменной DefaultUnicodeCodePage.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 13.04.2015, 13:04   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а какие кодировки нужны?
я писал вручную вероятностный код распознавания, но кодировок было всего 4.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.04.2015, 14:30   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Если не ошибаюсь, при таком подходе высока вероятность лжекодировки. Или вы о другом, можно подробней?
Файл не может быть частично кодирован. Иначе это не текстовый файл. Так что лже-кодировка это отсутствующий случайный вариант.
Человек_Борща вне форума Ответить с цитированием
Старый 13.04.2015, 16:24   #8
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Файл не может быть частично кодирован. Иначе это не текстовый файл. Так что лже-кодировка это отсутствующий случайный вариант.
Да, но ведь встречаются кодировки где не указан флаг принадлежности в отличие от UTF кодировки в самом начале файла. Как можно идентифицировать такой образец по первым 5-10 байтам?
Foxpronet вне форума Ответить с цитированием
Старый 13.04.2015, 16:38   #9
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
а какие кодировки нужны?
я писал вручную вероятностный код распознавания, но кодировок было всего 4.
В идеале все и вне зависимости от локали. Или хотя бы те, что вскрываются каким-либо минимальным алгоритмом и результат их работы приближенно достоверен. Но понимаю, что это утопия, поэтому буду рад и качественной связке ansi, iso, win и т.д. Просто я предусмотрел memo поле в стандартом диалоге открытия, поэтому желатен вариант распознавания не привязанный к обьему текста, т.е не статистический, иначе диалог здорово притормаживает. Попробал некоторые из них (DRKB), не очень хорошо справляются.
Foxpronet вне форума Ответить с цитированием
Старый 13.04.2015, 16:49   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Да, но ведь встречаются кодировки где не указан флаг принадлежности в отличие от UTF кодировки в самом начале файла. Как можно идентифицировать такой образец по первым 5-10 байтам?
По извесным символьным таблицам. А вообще в Delphi c 2009 версии есть класс TEncoding, он определит кодировку текста...
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кодировки Ekzamenator HTML и CSS 3 31.03.2014 22:01
Кодировки с++ Den4ik5 Общие вопросы C/C++ 1 11.12.2012 22:07
Кодировки chandrasecar БД в Delphi 2 13.11.2010 23:13
Кодировки jungle Операционные системы общие вопросы 8 08.09.2009 09:31
Кодировки BOBAH13 Общие вопросы Delphi 8 29.08.2008 14:20