Batch Rename - Unicode pro Filter List Through Shell Command

Vítáme všechny návrhy na nové funkce a vylepšení programu Altap Salamander. Pro každý návrh prosím vytvořte samostatný příspěvek.
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Batch Rename - Unicode pro Filter List Through Shell Command

Post by Ether »

Podávám to jako samostatný požadavek na vylepšení, protože se jedná o plugin a také protože si nejsem jistý, zda by se na to při přechodu jádra AS nezapomnělo. Jde mi o příkaz Filter List Through Shell Command..., který značně usnadňuje práci uživatelům schopným naprogramovat si malý skriptík. Zatím jsem to využíval bez problémů (kromě malého záseku, než jsem zjistil, že na odřádkování vyžaduje CRLF), ale teď jsem zjistil, že mi skript něco nebere. Když jsem si výstup z Batch Renameru vydumpoval, zjistil jsem, že výstup je v CP1250, zatímco skript očekával UTF-8. Takže by se hodilo, kdyby byl výstup v UTF-8 a vstup by se z něho převáděl (dočasně, dokud jádro nebude taky brát UTF-8).

Možná se divíte, kde jsem vzal takové názvy souborů - nikde, do Batch Rename kopíruju seznam názvů ze schránky. Konkrétně kopíruju seznamy skladeb z Wikipedie, ze kterých se dá poměrně jednoduše vytvořil seznam souborů pro dané album. Narazil jsem však na superuvozovky, které už nejsou ve standardní sadě znaků, viz třeba http://sk.wikipedia.org/wiki/Zodiak_(album).
Ελληνικά rulez.
Jan Patera
Plugin Developer
Plugin Developer
Posts: 707
Joined: 08 Dec 2005, 14:33
Location: Prague, Czech Republic
Contact:

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by Jan Patera »

ether wrote:Jde mi o příkaz Filter List Through Shell Command..., který značně usnadňuje práci uživatelům schopným naprogramovat si malý skriptík. Zatím jsem to využíval bez problémů (kromě malého záseku, než jsem zjistil, že na odřádkování vyžaduje CRLF), ale teď jsem zjistil, že mi skript něco nebere. Když jsem si výstup z Batch Renameru vydumpoval, zjistil jsem, že výstup je v CP1250, zatímco skript očekával UTF-8. Takže by se hodilo, kdyby byl výstup v UTF-8 a vstup by se z něho převáděl (dočasně, dokud jádro nebude taky brát UTF-8).
Narazil jsem však na superuvozovky, které už nejsou ve standardní sadě znaků, viz třeba http://sk.wikipedia.org/wiki/Zodiak_(album).
Jestli tomu dobre rozumim, tak chces, aby bylo mozne si zvolit kodovou stranku. Pokud se to posila command-line aplikaci, pak ANSI stranka (v nasich krajich tedy CP1250) asi opravdu neni to prave orechove. Spise by se melo jednat o OEM stranku (u nas CP852). Ty pozadujes UTF8. Dovedu si predstavit, ze by nekdo ocenil spise UTF16.
Nejsou-li tvoje uvozovky v CP1250 resp. CP852, pak ti asi UTF8 moc nepomuze?
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by Ether »

Jednak souhlasím s tím, že asi by každý ocenil jiné kódování, ale rozumným základem by asi mělo být UTF-8, které je pro kooperaci mezi různými systémy k nezaplacení (*). V uvedeném příkladě ze slovenské Wikipedie jsou to znaky U+201E a U+201C: a . Jejich reprezentací v CP1250 jsou znaky 0x84 a 0x93, do OEM jsou převedeny oba jako znaky 0x22 (" - rovné uvozovky). Tedy tyto znaky se do skriptu momentálně posílají jednoznačně identifikovatelné, ale zádrhel je v tom, že je musím pak do toho skriptu (všechny píšu zásadně v UTF-8) natvrdo zakódovat jako 0x84 a 0x93, pokud nechci využít nějakých funkcí pro překódování (což je kvůli dvěma znakům opravdu moc). Celý problém tedy nespočívá v tom, že by něco nešlo, ale že je to takhle zbytečně složité a navíc migrace na Unicode je stejně potřebná.

Přemýšlím, v jakém kódování mezi sebou normálně CLI programy komunikují, ale nějak si nevybavuju, že by všechny vyžadovaly UTF-8, takže asi by bylo opravdu nejlepší, kdyby to šlo nastavit případ o případu. Pokud jádro Salamandera v plugin API zveřejňuje funkce pro konverzi pomocí jeho tabulek, pak by nebyl problém s implementací různých OEM kódování a pak stačí přídat ten Unicode.

*) podporuje Unicode sadu, základní sada znaků je však reprezentována stejně jako ASCII, takže text je ve většině čitelný i v klasickém (singlebyte) programu; oproti UTF-16/UTF-32 však má malinko složitější zpracování právě kvůli proměnlivé šířce znaku
Ελληνικά rulez.
Jan Patera
Plugin Developer
Plugin Developer
Posts: 707
Joined: 08 Dec 2005, 14:33
Location: Prague, Czech Republic
Contact:

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by Jan Patera »

ether wrote:Přemýšlím, v jakém kódování mezi sebou normálně CLI programy komunikují, ale nějak si nevybavuju, že by všechny vyžadovaly UTF-8
IMHO z historickych duvodu v OEM. Casem pribylo ANSI, UCS2/UTF16 a snad i to tvoje UTF8.
ether wrote:Pokud jádro Salamandera v plugin API zveřejňuje funkce pro konverzi pomocí jeho tabulek, pak by nebyl problém s implementací různých OEM kódování a pak stačí přídat ten Unicode.[/size]
Ano, exportuje.
User avatar
Mem
Posts: 202
Joined: 08 Mar 2006, 15:07
Contact:

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by Mem »

Předem se omlouvám pokud je můj dotaz příliš mimo původní téma tohoto vlákna - chtěl jsem se zeptat, zda je v Batch Rename nějaká možnost, jak "normalizovat" názvy souborů, které jsou nějakým způsobem "zprasené". Konkrétně jsem na FAT32 disk nahrával přes levný Edimax file server nějaké složky, kde byly soubory pojmenované s diakritikou. Místo nich se uložily soubory s podivnými znaky, a manipulace s těmito soubory je teď velice omezená:
- přes AS ani Explorer nejde soubory kopírovat, mazat atd.
- kopírovat se mi je povedlo jen přes command shell (xcopy apod.), ale tím se problém jen přesouvá dál, protože i na zkopírované lokaci mají stále špatné názvy a další aplikace s tím neumějí pracovat (otevřít atd.)
- pokud ale soubor přejmenuji (nahradím podivné znaky něčím ASCII), tak už s nimi můžu manipulovat zase bez problémů

Můj problém je tedy v tom, jak jednoduše a pro všechny podadresáře udělat takové nahrazení názvů souborů. Díky za tipy
vbr
Posts: 9
Joined: 12 Nov 2006, 22:26

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by vbr »

Mem wrote:Předem se omlouvám pokud je můj dotaz příliš mimo původní téma tohoto vlákna - chtěl jsem se zeptat, zda je v Batch Rename nějaká možnost, jak "normalizovat" názvy souborů,
...
Můj problém je tedy v tom, jak jednoduše a pro všechny podadresáře udělat takové nahrazení názvů souborů. Díky za tipy
Pomoci hromadneho prejmenovani je aktualne v nekolika krocich mozne treba odstranit diakritiku z nazvu:
http://forum.altap.cz/viewtopic.php?f=8 ... iku#p15209
(Pro dalsi verzi se pocita s primou funkci.)
Nevim ale, jestli neco z toho pomuze pokud jsou soubory onech nazvu pro Salamander nedostupne; predpokladal bych, ze na to bude treba pouzit nastroj, ktery se k souborum i s takovymi nazvy nejak dostane...
vbr
User avatar
Mem
Posts: 202
Joined: 08 Mar 2006, 15:07
Contact:

Re: Batch Rename - Unicode pro Filter List Through Shell Command

Post by Mem »

Tak zatím jsem to vyřešil jednoduchým C# WinForms prográmkem, který přes standardní System.IO funkce (Directory.GetFiles, Directory.GetDirectories) uloží seznam původních názvů, udělá normalizaci podle mého řetězce (nechá jen povolené znaky) a pak se pokusí přes File.Move přejmenovat. U většiny souborů to zafunguje, pak jsou ale ještě 2 skupiny souborů, kde to nejde. Jedna skupina jde v Salamanderu přejmenovat přes F2, ale v druhé skupině jsou tak "tragické" případy, že to nejde, jeden příklad za všechny: Image
(Explorer to přejmenovat dokáže)

Perličkou pak ještě je, že Salamander pro takovýto adresář se "zmršenými" názvy ukazuje před (včetně varování že není dost místa v cíli) a při kopírování nesmyslnou velikost, např. teď 200 GB ačkoliv je tam tak 40 MB souborů ;))
Post Reply