PDA

View Full Version : سوال: برنامه ويرايش زيرنويس



yousefmostafaei
دوشنبه 11 اردیبهشت 1391, 18:31 عصر
سلام خدمت دوستان عزيز
من يه برنامه واسه ويرايش زير نويس(srt) نوشتم تموم شده ولي يه ايراد داره البته فكر كنم از كدش نيست
وقتي زير نويسو باز ميكنم اگه متنش فارسي باشه فارسيو نشون نميده و به جاش علامت سوال يا مربع نشون ميده هر چي فنتو عوض كردم فارسيه سيستمو چك كردم و ... درس نشد(اين ايرادو دوستامم دارن)
موقع سيو كردنم به همون صورت سيو ميشه و در واقع خراب ميشه
من چيكار كنم كه اين تكس باكسه فارسيو نشون بده؟:ناراحت: 86521


به کمک دوستان مشکل حل شد سورس برنامم هم صفحه بعد گذاشتم:قلب:

gwbasic
دوشنبه 11 اردیبهشت 1391, 20:31 عصر
موضوع فرمت متن هست که باید به یونیکد تبدیل شود

string s = "abcéabc";
byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(s);

string su = System.Text.Encoding.UTF8.GetString(utf8Bytes);

MessageBox.Show(su);

yousefmostafaei
سه شنبه 12 اردیبهشت 1391, 19:26 عصر
موضوع فرمت متن هست که باید به یونیکد تبدیل شود


string s = "abcéabc";
byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(s);

string su = System.Text.Encoding.UTF8.GetString(utf8Bytes);

MessageBox.Show(su);


خيلي ممنون از جوابتون ولي ميشه يكم بيشتر توضيح بديد من متوجه نشدم. شما اينجا 4 تا متغيير تعريف كرديد ولي بعضياش اصلا استفاده نشده
من يه تكس باكس دارم كه خو فايل srt رو باز ميكنم و توش ميريزم اگه زحمت بكشيد و بنويسيد كه دقيقا چه كدي بايد بنويسم ممنون ميشم:قلب:

gwbasic
سه شنبه 12 اردیبهشت 1391, 20:06 عصر
کد رو اصلاح کردم
متنی که مشکل داره رو توی s بریز و با توجه به کد بالا به utf8 تبدیل کن که می شه su حالا باید su متن فارسی درست باشه

yousefmostafaei
چهارشنبه 13 اردیبهشت 1391, 11:38 صبح
من عین کد شما رو امتحان کردم ارور نداد ولی کار نکرد متن بازم همون شکلیه:گریه:
اگه روش دیگه ای هست لطفا بگید خیلی برام مهمه.

gwbasic
چهارشنبه 13 اردیبهشت 1391, 12:13 عصر
اگه بتونی شما یه پروژه درست کنی که file زیرنویس رو بخونه و در یک textbox نشون بده یا یک نمنونه زیرنویس (srt) بذاری اینجا بهتر می تونم بررسی کنم

Alghoochi
چهارشنبه 13 اردیبهشت 1391, 13:51 عصر
سلام خدمت دوستان عزيز
من يه برنامه واسه ويرايش زير نويس(srt) نوشتم تموم شده ولي يه ايراد داره البته فكر كنم از كدش نيست
وقتي زير نويسو باز ميكنم اگه متنش فارسي باشه فارسيو نشون نميده و به جاش علامت سوال يا مربع نشون ميده هر چي فنتو عوض كردم فارسيه سيستمو چك كردم و ... درس نشد(اين ايرادو دوستامم دارن)
موقع سيو كردنم به همون صورت سيو ميشه و در واقع خراب ميشه
من چيكار كنم كه اين تكس باكسه فارسيو نشون بده؟:ناراحت: 86521

تا اونجایی که تو این عکس پیداست شما فقط متن همین تکست‌باکس رو فارسی داری و همون نشون داده نمی‌شه. یه سری به تنظیمات ویندوز بزن و ببین فارسی هست یا نه.

yousefmostafaei
چهارشنبه 13 اردیبهشت 1391, 15:16 عصر
تا اونجایی که تو این عکس پیداست شما فقط متن همین تکست‌باکس رو فارسی داری و همون نشون داده نمی‌شه. یه سری به تنظیمات ویندوز بزن و ببین فارسی هست یا نه.

قيلا كل اينارو كامل بررسي كردم اصلا مشكلي نداره

yousefmostafaei
چهارشنبه 13 اردیبهشت 1391, 15:24 عصر
اگه بتونی شما یه پروژه درست کنی که file زیرنویس رو بخونه و در یک textbox نشون بده یا یک نمنونه زیرنویس (srt) بذاری اینجا بهتر می تونم بررسی کنم

خيلي ممنون از پي گيريتون اتفاقا خودمم همين كارو كردم
اين يه پروزه سادس كه كد شما رو امتحان كردم كار نكرد.البته اول با انكد utf8 امتحان كردم كار نكرد بعد انكداي ديگرم امتحان كردم بازم كار نكرد.
(توش يه srt هم گذاشتم)http://s3.picofile.com/file/7370753438/Utf_8.rar.html

gwbasic
چهارشنبه 13 اردیبهشت 1391, 17:02 عصر
فرمت فایل به صورت ANSI یا Windows -1256 هست برای تبدیل از این روش استفاده کن

string filename = "Test.str";
StreamReader sr = new SteramReader(filename, Encoding.GetEncoding("windows-1256"));
string input = sr.ReadToEnd();
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, Encoding.UTF8);
sw.Write(input);
sw.Flush();
sw.Close();

string output = ms.ToString();


تست کردم جواب داد

Mahmoud.Afrad
چهارشنبه 13 اردیبهشت 1391, 18:05 عصر
اگر میخواهید زیرنویس با هر encoding رو باز کنید انکود ورودی رو دیفالت بگیرید:


string text, SrtText, s;
ofd1.ShowDialog();
text = ofd1.FileName;
SrtText = System.IO.File.ReadAllText(text , Encoding.Default);
byte[] utf8 = System.Text.Encoding.UTF8.GetBytes(SrtText);
s = System.Text.Encoding.UTF8.GetString(utf8);
richTextBox1.Text = s;

yousefmostafaei
چهارشنبه 13 اردیبهشت 1391, 18:41 عصر
اگر میخواهید زیرنویس با هر encoding رو باز کنید انکود ورودی رو دیفالت بگیرید:


string text, SrtText, s;
ofd1.ShowDialog();
text = ofd1.FileName;
SrtText = System.IO.File.ReadAllText(text , Encoding.Default);
byte[] utf8 = System.Text.Encoding.UTF8.GetBytes(SrtText);
s = System.Text.Encoding.UTF8.GetString(utf8);
richTextBox1.Text = s;


خیلی خیلی ممنون جوابمو گرفتم راه اسونی بود البته اقای مدیرم خیلی زحمت کشیدن راه ایشونم خوب بود ولی واسه ما تازه کارا یکم سخته.
اینم بگم اگه از روش بالایی استفاده کنیم دیگه لازم نیست با utf8 انکد کنیم در واقع دو خط اخر لازم نیست.

yousefmostafaei
چهارشنبه 13 اردیبهشت 1391, 18:57 عصر
به کمک دوستان عزیز مشکل حل شد منم سورس این برناممو گذاشتم امید وارم به درد بخوره

امکانات:
شیفت به عقب و جلو
امکان ویرایش تمام پارتها
ایجاد فایل جدید

اینم لینک دانلود برنامه امید وارم ایرادای برناممو بهم بگید.

http://s3.picofile.com/file/7370957197/My_Subtitle.zip.html

Mahmoud.Afrad
جمعه 15 اردیبهشت 1391, 07:43 صبح
تعدادی از مشکلات که یادم مونده:
1- کنترل هایی که نباید حالت انتخاب داشته باشند یا فقط خواندنی هستند رو tabstop=false باید باشند.
2- در حالتی که حالت NEW انتخاب شود دکمه های back و next کار نمیکند.
3- نداشتن دکمه هایی برای اضافه کردن تگ های بولد ، ایتالیک و آندرلاین به زیرنویس.
4- فاقد حالت پیش نمایش برای زیر نویسهایی که تگ بولد ، ایتالیک و آندرلاین دارند.
5- متد save اشتباه است در اصل متدی که شما نوشتید یک متد update هست که فقط باعث آپدیت شدن تکست باکس سمت راستی میشه نه اینکه تغییرات روی هارد ذخیره بشوند.
6- نداشتن متد save واقعی که تغییرات را روی هارد ذخیره کند.
7- کاربر باید بتواند فایل رو در هر encoding که خواست ذخیره کند در صورتی که برنامه شما فقط به صورت ANSI دخیره میکند.
8- کلا این نوع برنامه ها باید بتوانند نوع encoding فایل ورودی رو تشخیص بدهند تا بتوانند در همان encoding ذخیره کنند که برنامه شما فاقد اونه.
9- اگر تغییراتی در زیرنویس ها داده بشود یا مد NEW انتخاب شود و دکمه close زده شود برنامه بدون هیچ هشداری و بدون ذخیره تغییرات بسته می شود و تغییرات از دست میرود.
10- همچنین اگر در حال انجام تغییراتی روی زیرنویس باشید و بعد NEW یا open را بزنید تغییرات انجام شده از دست میرود. پس اگر تغییرات ذخیره نشده باشه یا زیرنویس جدید ذخیره نشده باشه در این حالت برای تغییر مد باید پیغام داده بشه.





من تمام مشکلاتی که گفتم رو برطرف کردم که حل کردن مشکل شماره 9و10 مشکل ترینش بود چون شامل حالتهای مختلفی میشد.
من هم کد رو قرار میدم:

yousefmostafaei
جمعه 15 اردیبهشت 1391, 11:58 صبح
تعدادی از مشکلات که یادم مونده:
1- کنترل هایی که نباید حالت انتخاب داشته باشند یا فقط خواندنی هستند رو tabstop=false باید باشند.
2- در حالتی که حالت NEW انتخاب شود دکمه های back و next کار نمیکند.
3- نداشتن دکمه هایی برای اضافه کردن تگ های بولد ، ایتالیک و آندرلاین به زیرنویس.
4- فاقد حالت پیش نمایش برای زیر نویسهایی که تگ بولد ، ایتالیک و آندرلاین دارند.
5- متد save اشتباه است در اصل متدی که شما نوشتید یک متد update هست که فقط باعث آپدیت شدن تکست باکس سمت راستی میشه نه اینکه تغییرات روی هارد ذخیره بشوند.
6- نداشتن متد save واقعی که تغییرات را روی هارد ذخیره کند.
7- کاربر باید بتواند فایل رو در هر encoding که خواست ذخیره کند در صورتی که برنامه شما فقط به صورت ANSI دخیره میکند.
8- کلا این نوع برنامه ها باید بتوانند نوع encoding فایل ورودی رو تشخیص بدهند تا بتوانند در همان encoding ذخیره کنند که برنامه شما فاقد اونه.
9- اگر تغییراتی در زیرنویس ها داده بشود یا مد NEW انتخاب شود و دکمه close زده شود برنامه بدون هیچ هشداری و بدون ذخیره تغییرات بسته می شود و تغییرات از دست میرود.
10- همچنین اگر در حال انجام تغییراتی روی زیرنویس باشید و بعد NEW یا open را بزنید تغییرات انجام شده از دست میرود. پس اگر تغییرات ذخیره نشده باشه یا زیرنویس جدید ذخیره نشده باشه در این حالت برای تغییر مد باید پیغام داده بشه.





من تمام مشکلاتی که گفتم رو برطرف کردم که حل کردن مشکل شماره 9و10 مشکل ترینش بود چون شامل حالتهای مختلفی میشد.
من هم کد رو قرار میدم:
مرسي خيلي ممنون كه زحمت كشيدين راستش اين پرو‍ژه درس ذخيرمون بود وقت نشد جزئياتي كه شما عرض كرديد رو لحاظ كنم وقتش كم بود
راستي اگه توي اصول كد نويسي ايراد داشتم حتما بهم بگيد اين خيلي برام مهمه كه اصولي كد بنويسم
در كل نظرتونو در مورد نحوه ي كد نوشتنم بگيد.