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

Re: Speciale tekens in bestandsnamen van oude files



Op 11-11-14 om 00:57 schreef Wouter Verhelst:
> 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).

Dat laatste was mijn plan. Testen of er ongeldige multibyte sequences in
voorkomen, zo ja converteren van cp850 naar utf-8.

Weet niet zeker of dat een goed idee is. Ik verwacht dat het zal werken
zo lang er geen computer met een OS uit andere landen bezig is geweest.

Volgens mij geeft cp1252 geen ongeldige multibyte sequences.

> 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.

Dat klinkt vrij vaag.

Groet,
Paul.





-- 
Paul van der Vlis Linux systeembeheer, Groningen
http://www.vandervlis.nl


Reply to: