Как правильно перекодировать имена файлов (UTF-8)

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Как правильно перекодировать имена файлов (UTF-8)

Post by John Doe »

Имеется набор файлов, в именах которых которых можно признать UTF-8 в OEM кодировке
.
Как бы правильнее вернуть именам человеческий вид?

Мне известны 2 способа, и оба предполагают использование ansi-плагинов.
1. Unicode Wizard + батник
2. Unicode Wizard + File(s) rename
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 15 times
Been thanked: 26 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by Wave »

Можно так: минимум два юникодных плагина умеют переименовывать файлы в редакторе. Я нынче пользуюсь VisRen от Alexey Samlyukov. Выделяешь файлы, отправляешь их переименовываться в редактор, выделяешь вторую колонку вертикальным блоком, копируешь, в другом редакторе (VisRen не позволяет переключать кодировки) переключаешь в юникод, копируешь, возвращаешь уже в правильной кодировке.

Собсно, можно так поступить даже с ансишным ReName (только абы не встретились в именах не-OEM символы), не раз так делал.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by John Doe »

Проще уж тогда батник нарисовать.
Но хотелось бы более прямой способ.
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 15 times
Been thanked: 26 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by Wave »

Предложенный мною способ не подходит только в случае, если эта операция происходит оченно регулярно или в ветвистом дереве каталогов. Да и то, можно макросы приспособить (собственно, у меня переименование в редакторе именно макросом и вызывается, экономит несколько нажатий клавиш). Для разовых случаев, пусть даже очень много файлов, вся операция занимает меньше минуты, а то и считанные секунды, если наловчиться.

Повторяю, я неоднократно переименовывал из таких вот юникодных имён в читаемые.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by John Doe »

Ваш способ работает, но он сложнее того что я сам использую (см. первый пост).
Причём и ваш и мой способ кривоваты, хотелось бы прямее.
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by HaRT »

Как-то так:

Code: Select all

for %F in ( *.flv ) do @for /f "usebackq delims=" %N in ( `dir /b "%~F" ^| recode.exe utf8..cp866` ) do @ren "%~F" "%~N"
Думаю, можно даже добиться, чтобы recode вызывался один раз на все файлы гуртом.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 15 times
Been thanked: 26 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by Wave »

Это, конечно, уже оффтопиком и спором ради спора, но мой способ позволяет не использовать ансишные плагины вообще. Кроме того, не нужно составлять и запускать батник (который, не знаю точно, но подозреваю, что может тоже напортачить с не-OEM символами). К тому же как этот батник составляется? Как минимум, копи-пастой (не поверю, что руками)? Так что ничуть не сложней.

А «более прямых способов» я слышал такого плана, что сгрузить имена файлов в текстовый файл, пропустить его через что-то типа iconv и отдать какой-нить утилите переименования.
Сомневаюсь, что кто-то предложит что-то лучше. Разве что писать скрипт для FarPowerShell или LuaFAR.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by DrKnS »

Подозреваю, можно будет обойтись и без всяких левых exe, засунув в нужные места "chcp 65001" и "chcp 866".
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by HaRT »

DrKnS wrote:Подозреваю, можно будет обойтись и без всяких левых exe, засунув в нужные места "chcp 65001" и "chcp 866".
Мне было бы интересно увидеть развитие этой идеи до работоспособного состояния.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by John Doe »

Wave wrote:К тому же как этот батник составляется? Как минимум, копи-пастой (не поверю, что руками)? Так что ничуть не сложней.
Имелось ввиду сложнее чем с помощью UnicodeWizard.
Батник не проще, даже наоборот - ручной работы будет больше, зато благодаря визуальному контролю больше шансов что никакие имена не попортятся.

User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by John Doe »

HaRT wrote:Как-то так:

Code: Select all

for %F in ( *.flv ) do @for /f "usebackq delims=" %N in ( `dir /b "%~F" ^| recode.exe utf8..cp866` ) do @ren "%~F" "%~N"
Спотыкается на Ελληνικά.flv

Code: Select all

╬Х╬╗╬╗╬╖╬╜╬╣╬║╬м.flv
Но это допустим редко встречается, а вот ситуация когда нормальные имена вперемешку UTF-8, причём некорые UTF-8 битые - чаще.
В идеале надо бы чтоб переименование производилось только в случае удачного декодирования, а всё что не удалось переименовать - выводилось бы на консоль.
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by HaRT »

John Doe wrote:
HaRT wrote:Как-то так:

Code: Select all

for %F in ( *.flv ) do @for /f "usebackq delims=" %N in ( `dir /b "%~F" ^| recode.exe utf8..cp866` ) do @ren "%~F" "%~N"
Спотыкается на Ελληνικά.flv
recode --help wrote:Report bugs to <recode-bugs@iro.umontreal.ca>.
John Doe wrote:В идеале надо бы чтоб переименование производилось только в случае удачного декодирования, а всё что не удалось переименовать - выводилось бы на консоль.
Согласен. Я ж и не утверждаю, что моё решение самое лучшее.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by John Doe »

recode --help wrote:Report bugs to <recode-bugs@iro.umontreal.ca>.
Боюсь тут издержки портирования на Win32...

Вот что-то не соображу как применить recode к тому же имени, но спроецированному на cp1251.

Code: Select all

Путин и Шевчук. Полная версия.flv
Пример реальный, файл получен wget'ом.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by Alexey Samlyukov »

VisRen не позволяет переключать кодировки
это не плагин, это фар2 так устроен. код не менялся в этом месте, в фар1 переключается, так что...
и кстати, не факт что такое переименование пройдет :)
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Посоветуйте правильный способ исправить имена файлов (UT

Post by HaRT »

John Doe wrote:Вот что-то не соображу как применить recode к тому же имени, но спроецированному на cp1251.

Code: Select all

Путин и Шевчук. Полная версия.flv
У меня получилось вот так:

Code: Select all

chcp 1251 & dir /b *.flv | recode utf8..cp866 & chcp 866
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Нужна помощь”