[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Speciale tekens in bestandsnamen van oude files



On Sun, Nov 09, 2014 at 11:17:33AM +0100, Paul van der Vlis wrote:
> Hallo,
> 
> Waarschijnlijk zijn jullie ze ook wel tegengekomen in een archief: van
> die bestanden met speciale tekens in de bestandsnaam, die niet goed
> afgebeeld worden en soms problemen geven.
> 
> Zelf zag ik problemen toen ik data naar NTFS moest kopieren, het
> kopiëren lukte niet met deze foutmelding: "Invalid or incomplete
> multibyte or wide character (84)".
> 
> Na enig zoeken ben ik er achter gekomen wat dit nu is en hoe je het toch
> kunt converteren naar UTF8. Het blijkt om "cp850" te gaan, wat
> bijvoorbeeld nog gebruikt werd in de Nederlandse Windows 98. [1]
> Nooit eerder van gehoord, en echt wat anders dan Windows-1252 of ISO-8859-1.

CP850 was de standaard encoding in deze contreien vóór de uitvinding van
de euro en voor Windows 95 (met CP1252). Het "leuke" aan CP850 is dat er
heel wat box drawing characters waren, zoals ╣ en ╚, en een hoop shading
karakters, zoals ▓ en ░ en consoorten. Als je ergens tussen 1985 en 1995
een computer met DOS gebruikt hebt, dan heb je zeker en vast een UI
gezien die van die karakters gebruik maakte; maar voor Windows was dat
niet echt nodig, dus hebben ze die karakters eruit gesjot en er een paar
accented letters voor in de plaats gezet.  Dat werd dan CP1252, aka
Windows-1252.

> Geconverteerd heb ik het uiteindelijk met rsync, zoiets:
> rsync -va --iconv=cp850,utf8 /path/K*cken_brf.sxw /path/
> 
> De speciale tekens dus vervangen door een sterretje, niet helemaal
> netjes, maar het functioneerde. En het ging om niet zoveel bestanden.
> Uiteraard kan dit ook met iconv.

Je kan de karakters omzetten met iconv, ja, maar het is moeilijker om ze
te verplaatsen.

> Het probleem is eigenlijk dat er vaak oude en nieuwe bestanden door
> elkaar staan in een archief, waarbij die enkele bestanden met speciale
> tekens in de bestandsnaam niet zo opvallen. Wat je eigenlijk zou willen
> is een test met bijvoorbeeld find of het zo'n oud bestand is, en zo ja
> daar een conversie op loslaten.

Helaas lijkt me dat redelijk moeilijk, omdat het bij 8-bit encodings
zoals cp850 en cp1252 bijna niet mogelijk is om te detecteren in welke
encoding iets geschreven is. Met UTF-8 kan dat wel (ttz, je kan
detecteren dat iets *niet* in UTF-8 geschreven is, als er ongeldige
multibyte sequences in voorkomen).

Er bestaan wel routines die heuristich tewerk gaan om te gokken of iets
al dan niet in een bepaalde encoding staat. Die routines nemen echter
aan dat je in een tekstbestand bepaalde karakters "waarschijnlijk" niet
gaat gebruiken, en dat als die er wel in voorkomen, dat dan de tekst in
kwestie "waarschijnlijk" niet in die bepaalde encoding is. Als die
aannames fout zijn (omdat je bijvoorbeeld bepaalde karakters wilt kunnen
tonen), dan werken die routines gewoon niet.

-- 
It is easy to love a country that is famous for chocolate and beer

  -- Barack Obama, speaking in Brussels, Belgium, 2014-03-26


Reply to: