منبع اصلی نوشتار زیر در این لینک قرار دارد

تبدیل charachter encoding فایل های متنی

سلام.
مشکل از اینجا شروع میشه که اکثر فایل های زیرنویس فارسی دارای encoding از نوع windows-1256 هستند. این باعث میشه که در نرم افزار های پخش فیلم مثل totem یا vlc زیرنویس فارسی درست نشون داده نشه. حتی اگه در تنظیمات vlc گزینه windows-1256 رو انتخاب کرده باشیم باز هم درست نمیشه. این مشکل با یه ورژن خاصی از libfribidi درست میشد. اما نمیدونم چرا در پارسیکس این روش جواب نمیده. برای حل این مشکل، من encoding فایل زیرنویس رو به utf8 تغییر میدم  و در تنظیمات vlc هم utf8 رو انتخاب میکنم. totem هم خودش متوجه خواهد شد. و زیرنویس فارسی درست نشون داده خواهد شد. برای این تغییر:

iconv -f windows-1256 -t utf8 /file-1.srt > /file-2.srt
طبیعتا آدرس فایل ها رو باید جایگزین کنید.

یک راه ساده تر برای این تبدیل، استفاده از یک اسکریپت ساده است. من این اسکریپت رو طبق نیاز خودم تغییر دادم. میتونید اون رو در یک فایل مثلا با نام srtconv ذخیره کنید و اون رو در فولدر usr/bin/  کپی کنید. و از این به بعد برای تبدیل یک زیرنویس به utf8 در خط فرمان تایپ کنید srtconv و بعد از اینتر کردن، آدرس فایلتون رو بهش میدید. اونوقت فایل شما از windows-1256 به utf8 تبدیل میشه و کنار فایل اصلی قرار میگیره.

#!/bin/bash
# get filename
# by AmiNimA  medicamin [at] gmail.com 

echo -n \"This converts a file with windows-1256 encoding to UTF8. Enter File path:\"
read fileName
 
if [ ! -f $fileName ]; then
  echo \"Filename $fileName does not exists\"
  exit 1
fi

iconv -f windows-1256 -t utf8 < $fileName > $fileName-NEW

یادتون باشه که مجوز اجرا شدن رو به اسکریپت بدید. شما میتونید با تغییر این اسکریپت کارهای دیگه ای هم انجام بدید!