Алгоритм определения кодировки

Разработка Far.
Post Reply
lost
Posts: 121
Joined: Mon 31 Oct, 2005 09:42
Has thanked: 5 times
Been thanked: 4 times

Алгоритм определения кодировки

Post by lost »

Понадобилась для работы фича автоматизированного определения кодовой страницы файла. Или более узкая задача, убедиться, что файл в UTF-8 без BOM.
В инете готовых утилит не нашёл. Может плохо искал?.. Если подскажете готовую утилиту под Win - буду благодарен.
Подумал, что Far ведь как-то определяет кодировки Какие исходники/методы за это отвечают? Не возбраняется перетащить их в свой проект?
Yegor
Posts: 1144
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 20 times
Been thanked: 30 times

Алгоритм определения кодировки

Post by Yegor »

Надо полагать, что вы можете спокойно взять и использовать в своем проекте, если будете следовать условиям BSD-3 лицензии.

https://github.com/FarGroup/FarManager/ ... r.cpp#L354 где-то здесь (сильно не вчитывался)
Last edited by Yegor on Wed 13 Oct, 2021 19:57, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Shmuel
Posts: 6378
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 398 times

Алгоритм определения кодировки

Post by Shmuel »

lost wrote: Wed 13 Oct, 2021 19:18 Или более узкая задача, убедиться, что файл в UTF-8 без BOM.
Более узкая задача решается простейшим макросом. BOM для UTF-8 проверяется на первых трёх байтах, далее есть функция utf8.utf8valid, которой можно скормить произвольный кусок файла.
lost
Posts: 121
Joined: Mon 31 Oct, 2005 09:42
Has thanked: 5 times
Been thanked: 4 times

Алгоритм определения кодировки

Post by lost »

Нет, решать эту задачу с помощью Far-а или LuaFar для меня не вариант.
Но фраза "utf8.utf8valid" навела меня на некий репозиторий на гитхабе "c-utf8-valid". Надо будет изучить.
siberia-man
Posts: 112
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 7 times

Алгоритм определения кодировки

Post by siberia-man »

Last edited by siberia-man on Thu 14 Oct, 2021 22:00, edited 1 time in total.
lost
Posts: 121
Joined: Mon 31 Oct, 2005 09:42
Has thanked: 5 times
Been thanked: 4 times

Алгоритм определения кодировки

Post by lost »

siberia-man wrote: Thu 14 Oct, 2021 12:54 bom_file.bat. Оно?
Не, другое. Кстати, bom_file кажись определяет только по BOM. Я пользуюсь другим аналогичным батником, но суть у него та же. А мне хотелось бы угадывать кодировку и без BOM-а.
Last edited by lost on Thu 14 Oct, 2021 13:39, edited 2 times in total.
siberia-man
Posts: 112
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 7 times

Алгоритм определения кодировки

Post by siberia-man »

lost wrote: Thu 14 Oct, 2021 13:38 определяет только по BOM
Да.

Есть идеи как это можно сделать и без BOM. Тоже на батнике (извращение, но можно).

Кстати file (Unix) умеет все это делать. Я только не помню, существует ли она отдельно вне пакетов типа cygwin/msys2.

updated
Существует - https://sourceforge.net/projects/gnuwin32/
Last edited by siberia-man on Thu 14 Oct, 2021 14:39, edited 1 time in total.
Shmuel
Posts: 6378
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 398 times

Алгоритм определения кодировки

Post by Shmuel »

lost wrote: Thu 14 Oct, 2021 12:28 Нет, решать эту задачу с помощью Far-а или LuaFar для меня не вариант.
Можно воспользоваться кодом функции utf8valid (он на Си).
А вот макрос (очень не идеальный, сделан вчера из спортивного интереса):
siberia-man
Posts: 112
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 7 times

Алгоритм определения кодировки

Post by siberia-man »

lost wrote: Thu 14 Oct, 2021 13:38 bom_file кажись определяет только по BOM
Я переименовал скрипт в file-detect-bom.bat. Свой предыдущий пост, ссылающийся на текст скрипта, я поправил тоже.

А вот еще один скрипт file-detect-enc.bat. Он умеет определять кодировку не только по BOM. Не тестировал производительность на больших файлах. Наверно, все медленно.
Post Reply

Return to “Development”