CudaLister (просмотр исходников)

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Skif_off писал(а):LonerD
UTF-16 LE без BOM? А зачем так делать?
Не знаю. Попались такие файлы скриптов в разных источниках, значит их существование возможно.
Windows 11 | TC DreamLair eternal pre-α
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Строго говоря, не "возможно", а "допустимо" и даже не "обязательно", но анализ BOM - самый ходовой вариант автодетекта кодировки юникода и вроде с него обычно начинают автодетект вообще.

Смутно припоминаю, что где-то в потрохах WinXP попадаются то ли конфиги, то ли логи в UTF-16 LE без BOM.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Loner,
мне нужно описание алго, словами хотя бы, который детектит такой utf16.
Например:

- читаем первые 20 words, смотрим что нечетные байты 0, а другие не 0.
- еще смотрим то же про utf16 LE.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Alextp
Добрался до компа и проверил AkelPad (UTF-16 LE узнал в Jota+, т.к. уже видел подобное): определяет правильно. Детект кодировки в Edit.c, если правильно понял - после анализа BOM и до проверки UTF-8 без BOM/не юникод.
Только не понял, что будет в случае суррогатных пар.

Добавлено спустя 3 минуты:

Забыл, по умолчанию размер буфера для распознавания 1024 байт.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Приделал _простой_ детект utf16 по первым 10 байтам- четные 0 а нечетные ascii. Для BE наоборот.

CudaText: https://sourceforge.net/projects/cudate ... a_version/

Не уверен что надо опцию "размер буфера".

Добавлено спустя 11 минут:

Про Akel:

- он детектит ascii code по ренджу 1..126, хотя надо бы по (9,10,13,32..126)
- он детектит UTF16 по частоте LE chars, BE chars.
Если частота LE > частоты BE и больше порога- детект LE.
Это криво. Т.к. хотя бы 2 символа BE уже должны говорить что "это не LE"...
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Alextp писал(а):Не уверен что надо опцию "размер буфера".
А сколько CudaText/CudaLister используют для детекта? В смысле, если BOM нет. Весь файл анализируется?
Alextp писал(а):- он детектит ascii code по ренджу 1..126, хотя надо бы по (9,10,13,32..126)
Не сразу дошло, в смысле - только печатные? В этом же цикле бинарные детектятся, ограничивать диапазон не резонно. Но их ведь немного, и всё уже в ОЗУ?

Про LE/BE не понял, это ведь просто порядок байт и считается, что попадается чаще - \x00\xXX или \xXX\x00?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Skif_off писал(а): Весь файл анализируется?
Первые 20 байт - наверно достаточно.
Про Акел - просто почитай код по ссылке Edit.c.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Alextp
Если есть символы из ASCII, то для определения порядка байтов, наверное, должно быть достаточно. Но имел в виду вообще для неюникода или UTF-8 без BOM, для всяких cp125x, oem и т.п.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Я уже не понял что ты имел в виду...
Короче выше написал мой коммент к Edit.c.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Alextp
Имел в виду, как CudaText/CudaLister определяют кодировки - анализируя весь файл или только часть?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Только часть. Для UTF8 no bom это Н кбайт, для UTF16 no bom -10-20 б.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Кто то может подтвердить этот баг?
я у себя не повторил, тестил в Wine.
https://github.com/Alexey-T/CudaLister/issues/37
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

У меня воспроизводится. Win7 x64, TC 9.21a x64, CudaLister 1.5.6, режим read-only без курсора.
Почему же, ё-моё, ты нигде не пишешь "ё"?
bob2000
Сообщения: 5
Зарегистрирован: Чт июн 15, 2017 14:48

Сообщение bob2000 »

Что нужно сделать, чтобы CudaLister не "перехватывал фокус"
То есть после его включения, другие плагины по клавише "4" уже не подключаются
Заметил, что перехватывает фокус только на файлах без "лексеров"
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Видимо ничего не сделать. Или доработать код на Гитхабе.
Ответить