View previous topic :: View next topic |
Author |
Message |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6180 Location: Москва
|
(Separately) Posted: Wed Jan 29, 2025 07:44 Post subject: |
|
|
Согласно ридми:
Quote: | "Binary" (binary files, containing special chars #00..#1F) |
UTF-16-файлы в большинстве своём содержат нулевые байты. Возможно, это поле предназначено показать, можно ли трактовать файл как текстовый при побайтовой обработке. Служебные символы в подобных сценариях часто ломаются (например, нулевой байт заменяется пробелом), и от исходного юникодного текста останутся рожки да ножки. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 722
|
(Separately) Posted: Thu Jan 30, 2025 14:06 Post subject: |
|
|
CaptainFlint
Даже если с технической точки зрения всё верно, на мой взгляд, в логику работы плагина это не вписывается.
Провел небольшие тесты. Баг, о котором говорил mig73, подтверждаю: без BOM плагин кодировки UTF-16 LE и UTF-16 BE не определяет. В CudaViewer всё нормально.
Alextp
Вы больше не планируете развивать и поддерживать плагин? |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6180 Location: Москва
|
(Separately) Posted: Thu Jan 30, 2025 15:28 Post subject: |
|
|
Orion9 wrote: | Даже если с технической точки зрения всё верно, на мой взгляд, в логику работы плагина это не вписывается.
|
А какой должна быть логика? Ведь тогда с точки зрения UTF-16 90% файлов можно считать текстовыми, ибо практически любая комбинация байтов окажется валидным символом (разве что нулевые байты числом больше одного подряд или непарные суррогатные последовательности попадутся случайно). Текст — это же не только русский-английский-немецкий, это и всякие иероглифы, которыми забита юникодная таблица. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 722
|
(Separately) Posted: Thu Jan 30, 2025 18:21 Post subject: |
|
|
CaptainFlint wrote: | А какой должна быть логика? |
Простой и понятной пользователю. Если в readme написано:
Quote: | This content plugin shows information about actual encoding of text files. |
То и при определении кодировки в поле "Type" должно быть "Text", раз уж автор сам избрал такую парадигму.
CaptainFlint wrote: | Ведь тогда с точки зрения UTF-16 90% файлов можно считать текстовыми |
Нельзя, пока алгоритм не определит иначе (вы же прекрасно это понимаете). Но вот именно алгоритма в плагине, похоже, и нету, отсюда все проблемы. Как-то я сразу это упустил, но в readme же написано:
Quote: | - "UTF-16 LE" (detection by signature)
- "UTF-16 BE" (detection by signature) |
Следует понимать, что, никаких определений кодировок, за исключением простого считывания маркера BOM, нет? Мне и в голову такое не могло прийти. Да, похоже, именно так. Добавил в начало mp3-файла FFFE - теперь он определяется как "UTF-16 LE" в поле плагина.
Интересует продвинутый и полноценный детект кодировки, как это делает CudaView или AkelPad. Если автор не планирует больше заниматься плагином, то какие есть альтернативы, кто-нибудь в курсе? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 722
|
(Separately) Posted: Fri Jan 31, 2025 13:01 Post subject: |
|
|
Вот примерно о чём идет речь:
Quote: | uchardet
uchardet is an encoding detector library, which takes a sequence of bytes in an unknown character encoding without any additional information, and attempts to determine the encoding of the text. Returned encoding names are iconv-compatible.
uchardet started as a C language binding of the original C++ implementation of the universal charset detection library by Mozilla. It can now detect more charsets, and more reliably than the original implementation.
History
As said in introduction, this was initially a project of Mozilla to allow better detection of page encodings, and it used to be part of Firefox. If not mistaken, this is not the case anymore (probably because nowadays most websites better announce their encoding, and also UTF-8 is much more widely spread).
Techniques used by universalchardet are described at https://www-archive.mozilla.org/projects/intl/universalcharsetdetection
It is to be noted that a lot has changed since the original code, yet the base concept is still around, basing detection not just on encoding rules, but importantly on analysis of character statistics in languages.
https://www.freedesktop.org/wiki/Software/uchardet/ |
Если верить этой странице, даже Notepad++ когда-то использовал эту библиотеку для определения кодировки текста.
В общем, очень хотелось бы иметь плагин, основанный на этой (или подобной этой) библиотеке. Пока я нашел только скомпилированную версию консольной утилиты:
https://github.com/JetDemo/uchardet
Консольную утилиту можно использовать в плагине WinScriptAdv или Autorun для вывода данных в колонки ТС. Но это только версия 0.0.6 библиотеки, а сейчас уже есть версия 0.0.8, кто-нибуть может скомпилировать последнюю версию? Очень неплохо себя показывает на тестовых файлах по второй ссылке.
Если кому-то интересно, то:
 Подключение через Autorun Code: | Pragma AutorunPluginFields "Encoding:::CharDetect"
Func CharDetect(FileName, FieldIndex, UnitIndex)
Local pipe, exe_tool = %COMMANDER_PATH% & "\Ini\Tools\uchardet.exe"
ProcessExecGetOutput pipe %exe_tool% '"%FileName%"'
Return pipe
EndFunc
|
|
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|