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
--
To UNSUBSCRIBE, email to debian-user-dutch-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/5463d732.3030...@vandervlis.nl