Garl 0 Report post Posted May 5, 2020 Опция детекта кодировки сама просится, соответственно детектить будем из того что разрешено. нормальный алгоритм детекта кодировок есть откуда взять\подсмотреть? Share this post Link to post Share on other sites
Guest DRON Report post Posted May 5, 2020 1 hour ago, Garl said: нормальный алгоритм детекта кодировок есть откуда взять\подсмотреть? Я вот такое когда-то писал: https://pastebin.com/zYKgzzHf Share this post Link to post Share on other sites
Garl 0 Report post Posted May 6, 2020 но у нас ещё и UTF7 и UTF16BE и UTF16LE с вот этими и загвоздка Share this post Link to post Share on other sites
Guest DRON Report post Posted May 6, 2020 6 hours ago, Garl said: с вот этими и загвоздка Это же наоборот самое простое: UTF-7 на то и "семь", что старший бит всегда 0, а BE от LE отличается по частоте пробелов и переносов, то есть чего больше 0020,000D,000A или 0A00,0D00,2000. Если лень самому писать, то под виндой можно древнюю мозилловскую либу прикрутить: http://chsdet.sourceforge.net/ Исходники самой либы: https://dxr.mozilla.org/mozilla/source/extensions/universalchardet Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 6, 2020 Сделайте детект utf8/16 пока хотя бы по BOM. Share this post Link to post Share on other sites
Garl 0 Report post Posted May 6, 2020 из-за отсутствия нормальной реализации utf16 есть шанс не включать его поддержку в сборки. или нужен человек который сможет реализовать поддержку на ассемблере . upd: детект по BOM сделал, но глючит определение строк... Share this post Link to post Share on other sites
Garl 0 Report post Posted May 7, 2020 23 hours ago, Guest DRON said: Это же наоборот самое простое: UTF-7 на то и "семь", что старший бит всегда 0, берём документацию на английском языке и смотрим: там все буквы со старшим нулевым битом. так что не совсем катит. надо учиться детектить по контрольной сумме первых байт первой строки Share this post Link to post Share on other sites
Guest DRON Report post Posted May 7, 2020 3 hours ago, Garl said: берём документацию на английском языке и смотрим: там все буквы со старшим нулевым битом. То же самое можно сказать про ЛЮБУЮ другую кодировку: их стараются делать так, чтобы ASCII текст передавался с наименьшими изменениями. 3 hours ago, Garl said: надо учиться детектить по контрольной сумме первых байт первой строки Если под "контрольной сумме" понимается BOM, то его тоже может не быть. В общем, никакого магического способа определить кодировку произвольного текста не существует, можно только угадать с некоторой вероятностью. Share this post Link to post Share on other sites
Garl 0 Report post Posted May 7, 2020 ASCII - как есть ANSI - [+] по частоте упоминания символов 'а','е','и','о','у' в своей кодировке KOI - [+] по частоте упоминания символов 'а','е','и','о','у' в своей кодировке UTF7 - [ - ] если текст только с английскими буквами - перебором со 100% попаданием определить не получится. нужен алгоритм декодирования UTF8 - [+] BOM - без BOM можно попробовать определять по первым байтам, но если в тексте сперва идут английские буквы - ничего не выйдет UTF16BE - [+] BOM , без BOM не определяем UTF16LE - [+] BOM , без BOM не определяем Share this post Link to post Share on other sites
Garl 0 Report post Posted May 7, 2020 49 minutes ago, Guest DRON said: Если под "контрольной сумме" понимается BOM нет, в UTF7 как раз используется BASE64 символов Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 7, 2020 А сколько байт от начала файла проверяется для определения кодировки? От размера файла зависит? Share this post Link to post Share on other sites
Guest DRON Report post Posted May 7, 2020 4 hours ago, Garl said: если текст только с английскими буквами - перебором со 100% попаданием определить не получится. 100% не получится никогда и ни с какой кодировкой, потому как некоторые сочетания байт валидны для многих кодировок. 4 hours ago, Garl said: нужен алгоритм декодирования В UTF-7 с русским текстом должно быть много +BB, +BC, +BE, +BD. И что будет с поиском в файлах при включенной "Во всех кодировках": автоопределение или по старинке? Share this post Link to post Share on other sites
Garl 0 Report post Posted May 7, 2020 3 hours ago, Guest WAJIM said: А сколько байт от начала файла проверяется для определения кодировки? От размера файла зависит? весь файл (нажмите Alt-F1 в редакторе при сброшеном выделении) но при 100% найденном BOM дальше детект кодировок не учитывается. 1 hour ago, Guest DRON said: И что будет с поиском в файлах при включенной "Во всех кодировках": автоопределение или по старинке? строка будет переводиться в ascii и далее по старому сценарию. но до поиска пока руки не доходят. тут ещё кучу мелочей допиливать надо. Share this post Link to post Share on other sites
Garl 0 Report post Posted May 8, 2020 в ночнушке : новый детектер UTF8 1 ) по BOM 2) по трём символам больше одного байта в первых двух строках файла (вот тут можно подумать и проверять еще) на тестовых примерах сработка 100% Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 8, 2020 1 hour ago, Garl said: 2) по трём символам больше одного байта в первых двух строках файла Очень плохо детектит UTF8. Надо проверять не строки, а например начальные 1-2 КБ файла. Share this post Link to post Share on other sites
Garl 0 Report post Posted May 8, 2020 можно чуток примеров? з.ы. сделал отдельно опцию для детекта кодировки во вьювере Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 8, 2020 А почему эта опция по умолчанию отключена? Её ещё и не видно при открытии окна настроек. Делаете из файлового менеджера квест... :( Вьюер по прежнему при автодетекте кодировки берет список кодировок из редактора вместо своих. Плюс есть глюк: если кодировка KOI отключена, то кодировка WIN не детектится. Примеры файлов с UTF8 в аттаче. 2.php 1.php Share this post Link to post Share on other sites
Garl 0 Report post Posted May 8, 2020 >А почему эта опция по умолчанию отключена? при сносе инишки она будет включена >Её ещё и не видно при открытии окна настроек. поправлено, но изюминка же именно в настройках. >Вьюер по прежнему при автодетекте кодировки берет список кодировок из редактора вместо своих. fixed >Плюс есть глюк: если кодировка KOI отключена, то кодировка WIN не детектится fixed. но при последующем детекте вьювер уже будет брать кодировку из редактора и наоборот. ( и надо ковырять передачу кодировок через кнопку F11) >Примеры файлов с UTF8 в аттаче. fixed (определяем до трёх UTF символов в первых 10 строках. должно хаватить?) Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 8, 2020 12 minutes ago, Garl said: fixed (определяем до трёх UTF символов в первых 10 строках. должно хаватить?) Конечно не должно. Зачем вы по строкам считаете? А если в файле 10 пустых строк или там шапка на английском языке? Делайте проверку не по строкам, а по первым 1024 байтам файла. Share this post Link to post Share on other sites
Garl 0 Report post Posted May 8, 2020 читаем теперь весь буфер до трёх UTF8 символов офф вот это https://www.php.net/manual/ru/function.imap-utf7-decode.php для определения UTF7 Нас как нибудь помочь сможет? Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 9, 2020 Во, теперь UTF8 детектится нормально! ИМХО UTF7 вообще не нужен, не пользуется им никто. 12 hours ago, Garl said: но при последующем детекте вьювер уже будет брать кодировку из редактора и наоборот. Жесть какая-то... Share this post Link to post Share on other sites
Garl 0 Report post Posted May 9, 2020 3 hours ago, Guest WAJIM said: ИМХО UTF7 вообще не нужен, не пользуется им никто. тогда обойдёмся без детекта. Share this post Link to post Share on other sites
Guest WAJIM Report post Posted May 9, 2020 Что-то теперь UTF8 слишком слишком агрессивно детектится вместо DOS. Пару примеров приложил. Refs.txt License.txt Share this post Link to post Share on other sites
Garl 0 Report post Posted May 9, 2020 ага спасибо. сделал проверку не на "или" а на "и" что более корректно. в ночнушке. так же реализован поиск по юникодовым строкам (пока во вьювере в хекс режиме) Share this post Link to post Share on other sites
Guest DRON Report post Posted May 10, 2020 Какой-то странный баг с несоответствием строки дисков и списка "Выбор дисков". USB диск G только что вставлен, а диска D, который ещё и выделен странным цветом, вообще отродясь на этой машине не было. Share this post Link to post Share on other sites