Jump to content
Muxe Inc Forums

Recommended Posts

Garl    0

Опция детекта кодировки сама просится, соответственно детектить будем из того что разрешено.

нормальный алгоритм детекта кодировок есть откуда взять\подсмотреть?

 

Share this post


Link to post
Share on other sites
Guest DRON   
Guest DRON
1 hour ago, Garl said:

нормальный алгоритм детекта кодировок есть откуда взять\подсмотреть?

Я вот такое когда-то писал:

https://pastebin.com/zYKgzzHf

Share this post


Link to post
Share on other sites
Garl    0

но у нас ещё и UTF7 и UTF16BE и UTF16LE

с вот этими и загвоздка

Share this post


Link to post
Share on other sites
Guest DRON   
Guest DRON
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   
Guest WAJIM

Сделайте детект utf8/16 пока хотя бы по BOM.

Share this post


Link to post
Share on other sites
Garl    0

из-за отсутствия нормальной реализации utf16 есть шанс не включать его поддержку в сборки.

или нужен человек который сможет реализовать поддержку на ассемблере .

upd:

детект по BOM сделал, но глючит определение строк... 

Share this post


Link to post
Share on other sites
Garl    0
23 hours ago, Guest DRON said:

Это же наоборот самое простое: UTF-7 на то и "семь", что старший бит всегда 0,

берём документацию на английском языке и смотрим: там все буквы со старшим нулевым битом.

так что не совсем катит. надо учиться детектить по контрольной сумме первых байт первой строки

 

 

Share this post


Link to post
Share on other sites
Guest DRON   
Guest DRON
3 hours ago, Garl said:

берём документацию на английском языке и смотрим: там все буквы со старшим нулевым битом.

То же самое можно сказать про ЛЮБУЮ другую кодировку: их стараются делать так, чтобы ASCII текст передавался с наименьшими изменениями.

3 hours ago, Garl said:

надо учиться детектить по контрольной сумме первых байт первой строки

Если под "контрольной сумме" понимается BOM, то его тоже может не быть.

В общем, никакого магического способа определить кодировку произвольного текста не существует, можно только угадать с некоторой вероятностью.

Share this post


Link to post
Share on other sites
Garl    0

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
49 minutes ago, Guest DRON said:

Если под "контрольной сумме" понимается BOM

нет, в UTF7 как раз используется BASE64 символов 

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM

А сколько байт от начала файла проверяется для определения кодировки? От размера файла зависит?

 

 

Share this post


Link to post
Share on other sites
Guest DRON   
Guest DRON
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
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

в ночнушке : новый детектер UTF8

1 ) по BOM

2) по трём символам больше одного байта в первых двух строках файла (вот тут можно подумать и проверять еще)

на тестовых примерах сработка 100%

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM
1 hour ago, Garl said:

2) по трём символам больше одного байта в первых двух строках файла

Очень плохо детектит UTF8. Надо проверять не строки, а например начальные 1-2 КБ файла.

 

Share this post


Link to post
Share on other sites
Garl    0

можно чуток примеров?

з.ы.

сделал отдельно опцию для детекта кодировки во вьювере

 

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM

А почему эта опция по умолчанию отключена? Её ещё и не видно при открытии окна настроек. Делаете из файлового менеджера квест... :(

Вьюер по прежнему при автодетекте кодировки берет список кодировок из редактора вместо своих.

Плюс есть глюк: если кодировка KOI отключена, то кодировка WIN не детектится.

Примеры файлов с UTF8 в аттаче.

2.php

1.php

Share this post


Link to post
Share on other sites
Garl    0

>А почему эта опция по умолчанию отключена? 
при сносе инишки она будет включена

>Её ещё и не видно при открытии окна настроек. 
поправлено, но изюминка же именно в настройках.

>Вьюер по прежнему при автодетекте кодировки берет список кодировок из редактора вместо своих.

fixed

>Плюс есть глюк: если кодировка KOI отключена, то кодировка WIN не детектится

fixed. но при последующем детекте  вьювер уже будет брать кодировку из редактора и наоборот. ( и надо ковырять передачу кодировок через кнопку F11)

>Примеры файлов с UTF8 в аттаче.

fixed  (определяем до трёх UTF  символов в первых 10 строках. должно хаватить?)

 

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM
12 minutes ago, Garl said:

fixed  (определяем до трёх UTF  символов в первых 10 строках. должно хаватить?)

Конечно не должно. Зачем вы по строкам считаете? А если в файле 10 пустых строк или там шапка на английском языке?

Делайте проверку не по строкам, а по первым 1024 байтам файла.

 

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM

Во, теперь UTF8 детектится нормально!

ИМХО UTF7 вообще не нужен, не пользуется им никто.

12 hours ago, Garl said:

но при последующем детекте  вьювер уже будет брать кодировку из редактора и наоборот.

Жесть какая-то...

 

Share this post


Link to post
Share on other sites
Garl    0
3 hours ago, Guest WAJIM said:

ИМХО UTF7 вообще не нужен, не пользуется им никто.

тогда обойдёмся без детекта.

Share this post


Link to post
Share on other sites
Guest WAJIM   
Guest WAJIM

Что-то теперь UTF8 слишком слишком агрессивно детектится вместо DOS.

Пару примеров приложил.

 

Refs.txt

License.txt

Share this post


Link to post
Share on other sites
Garl    0

ага спасибо. сделал проверку не на "или" а на "и" что более корректно.

в ночнушке.

так же реализован поиск по юникодовым строкам (пока во вьювере в хекс режиме)

Share this post


Link to post
Share on other sites
Guest DRON   
Guest DRON

Какой-то странный баг с несоответствием строки дисков и списка "Выбор дисков". USB диск G только что вставлен, а диска D, который ещё и выделен странным цветом, вообще отродясь на этой машине не было.

Image 3.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×