Страница 10 из 18
Добавлено: Пт авг 17, 2018 22:16
LonerD
Skif_off писал(а):LonerD
UTF-16 LE без BOM? А зачем так делать?
Не знаю. Попались такие файлы скриптов в разных источниках, значит их существование возможно.
Добавлено: Пт авг 17, 2018 22:53
Skif_off
Строго говоря, не "возможно", а "допустимо" и даже не "обязательно", но анализ BOM - самый ходовой вариант автодетекта кодировки юникода и вроде с него обычно начинают автодетект вообще.
Смутно припоминаю, что где-то в потрохах WinXP попадаются то ли конфиги, то ли логи в UTF-16 LE без BOM.
Добавлено: Пт авг 17, 2018 23:52
Alextp
Loner,
мне нужно описание алго, словами хотя бы, который детектит такой utf16.
Например:
- читаем первые 20 words, смотрим что нечетные байты 0, а другие не 0.
- еще смотрим то же про utf16 LE.
Добавлено: Сб авг 18, 2018 02:21
Skif_off
Alextp
Добрался до компа и проверил AkelPad
(UTF-16 LE узнал в Jota+, т.к. уже видел подобное): определяет правильно. Детект кодировки в
Edit.c, если правильно понял - после анализа BOM и до проверки UTF-8 без BOM/не юникод.
Только не понял, что будет в случае суррогатных пар.
Добавлено спустя 3 минуты:
Забыл, по умолчанию размер буфера для распознавания 1024 байт.
Добавлено: Сб авг 18, 2018 11:08
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"...
Добавлено: Сб авг 18, 2018 12:03
Skif_off
Alextp писал(а):Не уверен что надо опцию "размер буфера".
А сколько CudaText/CudaLister используют для детекта? В смысле, если BOM нет. Весь файл анализируется?
Alextp писал(а):- он детектит ascii code по ренджу 1..126, хотя надо бы по (9,10,13,32..126)
Не сразу дошло, в смысле - только печатные? В этом же цикле бинарные детектятся, ограничивать диапазон не резонно. Но их ведь немного, и всё уже в ОЗУ?
Про LE/BE не понял, это ведь просто порядок байт и считается, что попадается чаще - \x00\xXX или \xXX\x00?
Добавлено: Сб авг 18, 2018 12:17
Alextp
Skif_off писал(а): Весь файл анализируется?
Первые 20 байт - наверно достаточно.
Про Акел - просто почитай код по ссылке Edit.c.
Добавлено: Сб авг 18, 2018 21:06
Skif_off
Alextp
Если есть символы из ASCII, то для определения порядка байтов, наверное, должно быть достаточно. Но имел в виду вообще для неюникода или UTF-8 без BOM, для всяких cp125x, oem и т.п.
Добавлено: Вс авг 19, 2018 22:53
Alextp
Я уже не понял что ты имел в виду...
Короче выше написал мой коммент к Edit.c.
Добавлено: Пн авг 20, 2018 15:42
Skif_off
Alextp
Имел в виду, как CudaText/CudaLister определяют кодировки - анализируя весь файл или только часть?
Добавлено: Пн авг 20, 2018 17:32
Alextp
Только часть. Для UTF8 no bom это Н кбайт, для UTF16 no bom -10-20 б.
Добавлено: Ср окт 24, 2018 21:16
Alextp
Кто то может подтвердить этот баг?
я у себя не повторил, тестил в Wine.
https://github.com/Alexey-T/CudaLister/issues/37
Добавлено: Чт ноя 01, 2018 01:42
CaptainFlint
У меня воспроизводится. Win7 x64, TC 9.21a x64, CudaLister 1.5.6, режим read-only без курсора.
Добавлено: Пт янв 25, 2019 20:15
bob2000
Что нужно сделать, чтобы CudaLister не "перехватывал фокус"
То есть после его включения, другие плагины по клавише "4" уже не подключаются
Заметил, что перехватывает фокус только на файлах без "лексеров"
Добавлено: Пт фев 01, 2019 01:02
Alextp
Видимо ничего не сделать. Или доработать код на Гитхабе.