Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Tip: codepage van tekstbestanden veranderen naar UTF-8  (gelezen 3283 keer)

Offline Bloom

  • Lid
Tip: codepage van tekstbestanden veranderen naar UTF-8
« Gepost op: 2016/01/03, 17:00:59 »
Platte tekstbestanden die van Windows-systemen komen zijn vrijwel altijd in de WINDOWS-1252 codepage, dat is een speciale versie van Latin-1 (iso-8859-1) met door Microsoft gedefinieerde extra symbolen voor alle binaire codes waarvan de meest linkse bit op 1 staat.
En ja hoor: Linux en MacOS X geven die tekens dus niet correct weer. Heel de wereld werkt met UTF-8 dat door ieder systeem correct weergegeven wordt, maar Microsoft doet het weer anders en schept dus (alweer) incompatibiliteit. Diepe zucht. :(

Iets waarbij ik dat regelmatig tegenkom is ondertitelbestanden (.srt extensie). Ik gebruik Kodi/XBMC onder Ubuntu om films en tv-series weer te geven en de ondertitels tonen vaak vraagtekens of andere grafische tekens waar letters met accenten horen. Als die ondertitels in een los .srt-bestand zitten kun je er iets aan doen want dat zijn gewone tekstbestanden.

Als je wil weten in welke codepage een tekstbestand staat, kun je daar het file-terminalbevel voor gebruiken:
file -bi bestandsnaam
en dat geeft dan bijvoorbeeld
text/plain; charset=us-ascii
of
text/plain; charset=iso-8859-1
Hierbij moeten we opmerken dat WINDOWS-1252 hier vrijwel altijd weergegeven wordt als iso-8859-1. Het is namelijk voor file eigenlijk meer een nattevingeroperatie om de codepage van een tekstbestand te bepalen.

Voor Nederlandstalige ondertitels gaan  we ervan uit dat ze altijd in WINDOWS-1252 staan als het geen UTF-8 is en converteren we ze dus naar UTF-8 met iconv.

Als je de twee benodigde programma's niet hebt, moet je die eerst installeren:
sudo apt-get install fileiconv hoort bij libc6 en die is normaal op elke Linux systeem aanwezig.
Controleer met:
which file
which iconv
en dat zou allebei een locatie (normaal /usr/bin) moeten teruggeven. Als een van de twee leeg blijft, is die niet geïnstalleerd.
Heb je ze allebei? Dan kun je het volgende bash script gebruiken om alle .srt-bestanden in de opgegeven directory en alles daaronder op te sporen, te kijken of ze geen UTF-8 zijn en zo ja, ze te converteren naar UTF-8. En dan zullen ze correct weergegeven worden met videospelers onder Linux.

#!/bin/bash
#parameter directory vereist zonder eindslash - ik heb geen controle hierop ingeprogrammeerd
FROM=WINDOWS-1252
TO=UTF-8
ICONV="iconv -f $FROM -t $TO"
# Convert
find $1/ -type f -iname "*.srt" | while read fn; do
 file -bi "${fn}"|grep -E "charset=utf-8" >/dev/null
 if [ $? -ne 0 ]; then
  cp "${fn}" "${fn}".bak
  $ICONV < "${fn}".bak > "${fn}"
  rm "${fn}".bak
 fi
done

Offline vanadium

  • Lid
Re: Tip: codepage van tekstbestanden veranderen naar UTF-8
« Reactie #1 Gepost op: 2016/01/05, 13:24:40 »
Dank je wel! Hier had ik ook al eens voor gekeken. Ik had echter niet gevonden hoe je de (vermoedelijke) codepagina van een bestand kan bepalen. Voor scriptguru's is het ook mogelijk automatisch de codepagina van het bestand te bepalen. Dan kan elk tekstbestand met eender welke codepage volautomatisch naar bijvoorbeeld UTF-8 omgezet worden.