www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida arrow debian arrow Kolla text kodning med PHP
2008-05-13
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
Artikeltips
BadVista
Kolla text kodning med PHP  E-post

Ibland kommer undertexter i formatet ISO-8859-1. Ibland som UTF-8.
Mitt problem är att min mediaspelare (VLC) vill ha UTF-8 medan min DVD-spelare gillar ISO-8859-1.
När jag bränner en DVD måste jag alltså ha undertexter i båda formaten.

Nedanstående script (kallat enc) är skrivet i PHP och gör ett försök att könna av vilken teckenkodning en fil använder sig av.

 
#!/usr/bin/php -q
<?php
if($argc != 2 || in_array($argv[1], 
  array('--help','-help','-h'))) {
  print "USAGE: enc filename\n";
 
} else {
  $FILENAME = $argv[1];
 
  # open, read (no sanity check)
  $CONTENT = fread(fopen($FILENAME, "r"), 
    filesize($FILENAME));
  $ENCODING = mb_detect_encoding($CONTENT, 
    'UTF-8, ISO-8859-1');
  print $ENCODING . "\n";
}
?>

Anta att jag har filen hls-babel.srt och vill se till att jag har både ISO och UTF varianter av undertexten.

 
$ enc hls-babel.srt
UTF-8
 
$ iconv -f UTF8 -t ISO88591 -o hls-babel.iso.srt hls-babel.srt

Först kollar jag alltså med scriptet vilken teckenkodning filen använder sig av. Sedan konverterar jag filen till en alternativ teckenkodning med iconv.
-f betyder "from", -t betyder "to", -o betyder "output to"
Kommandot betyder alltså: omkoda från UTF-8 till ISO-8859-1 och skickar resultatet till hls-babel.iso.srt.

Här använder sig BASH av enc för att skapa en alternativ textfil

srt-conv

#!/bin/bash
FILENAME=$1
PREFIX=${FILENAME%%.*}
SUFFIX=${FILENAME#*.}
ENCODING=`enc $FILENAME`
 
case "$ENCODING" in
  "UTF-8" )
    echo "creating $PREFIX.iso.srt"
    iconv -f UTF8 -t ISO88591 -o $PREFIX.iso.srt $FILENAME
    exit 0
    ;;
 
  "ISO-8859-1" )
    echo "creating $PREFIX.utf.srt"
    iconv -f ISO88591 -t UTF8 -o $PREFIX.utf.srt $FILENAME
    exit 0
    ;;
 
  * )
    echo "Encoding not recognized ($ENCODING)"
    exit 1
    ;;
esac

Med exemplet vill jag peka på möjligheten att känna av teckenkodning och skapa alternativ undertext. För större användbarhet bör felkontroller byggas in i scripten såsom felaktigt angivna filnamn, namnkrock med redan existerande filnamn o.dyl.

För att skapa alternativ undertext av alla srt-filer i en katalog kan man skriva :
for f in `ls *.srt`; do srt-conv $f;done

Kommentarer (0)Add Comment

Skriv kommentar

busy
 
< Föregående
 
Top! Top!