Portál AbcLinuxu, 5. května 2025 17:31
wget -r
a mám v mnoha adresářích toho webu názvy souborů jako Dans le m'$'\351''tro
nebo '$'\340'' louer
. Web to byl/je prastarý a neposlal charset a i interní názvy ve struktuře adresářů v url byly lokálním kódování. Nejbližší jsem nalezl je kódování ISO-8859-1, struktura '$'\oktalove_cislo'
, je/odpovídá ISO charakteru (ve francouštině). Ale celé to samozřejmě se zapsalo na FS (btrfs) s kódováním UTF-8. Mount (mount bind) by umožnil nadefinovat charset jen na FAT, NTFS, nebo ISO9660. Nějaký nápad? Nechce se mi procházet stovky souborů a měnit to ručně a ani otravovat znovu server s několika dalšími tisicí stahování, které jsou v pořádku.
Řešení dotazu:
convmv
ls -l
název souboru. A po prozkoumání, co to je, jsou octal. (ono to ani nejsou "vyšší znaky", jen znaky které utf8 neumí interpretovat.)
A zřejmě ten zdrojový kód je po zápisu win1252, což je superset iso-8859-1, který má tisknutelnými znaky obsazené i znaky 128-159 (0x80-0x9F). Narazil jsem na nekolik jmen souborů se znakem . Znakové sady ISO neobsazovaly tisknutelnými znaky rozsahy (0x00-0x1f a 0x80-0x9f), pravděpodobně proto, že v roce 1987, kdy vznikalo iso, bylo ještě dost komunikačních zařízení/programů/služeb způsobilých jen pro 7-bit ASCII, a některé z nich dokonce vynulovaly osmý bit a ostatní nechaly, pokud na něj v komunikaci narazily. (Pamatuji si SMTP server) a díky tomu, že v 0x00-0x1f jsou v ASCII řídící kód, tak patrně riziko, že po průchodem takovým programem řídící kódy způsobí rozpad textu bylo vyšší než 32 možných získaných znaků.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.