PDA

View Full Version : مشکل با خواندن فایل تکست فارسی با فرمت ansi از اینترنت



R2du-soft
شنبه 02 مرداد 1395, 20:51 عصر
سلام
من از کد زیر برای خوندن یک فایل متنی از اینترنت استفاده میکنم:

System.Net.WebClient wc = new System.Net.WebClient();
String var;
var = wc.DownloadString("http://dl.rosesoftware.ir/RoseSoftware List/Rose Recommended Software/ansi.txt");
MessageBox.Show(var);
اما چون فایل txt متن من با فرمت ansi ذخیره شده و درونش کاراکتر های فارسی هست نمیشه متن پیغام به درستی نمایش داده نمیشه،انکدینگ رو هم تغییر دادم اما باز درست نشد،تنها راه تبدیل فایلم به فرمت utf-8 هست ولی چون فالیهام زیاد هستن و برنامه تغریبا تموم شده نمیتونم کل فایلها رو تغییر فرمت بدم،راهی برای خوندن این فایل که با فرمت ansi هست موجود هست؟
آدرس فایل با فرمت ansi:
dl.rosesoftware.ir/RoseSoftware List/Settings/Persian.txt

R2du-soft
یک شنبه 03 مرداد 1395, 03:19 صبح
دوستان من نوع فرمت فایل تکست رو به utf8 تغییر دادم و متن فارسی رو درونش نوشتم،با روش زیر تونستم که بدون مشکل متن رو نشون بدم:

1-
نوع فرمت فایل: UTF8
زبان نوشته شده در فایل: فارسی
متن نوشته شده در فایل: این یک تست است
کد استفاده شده:

System.Net.WebClient wc = new System.Net.WebClient();
richTextBox1.Text = wc.DownloadString("http://dl.rosesoftware.ir/Test/Persian-UTF8.txt");


خروجی نمایش داده شده پس از اجرای کد بالا:

این یک تست است




2-
نوع فرمت فایل: UTF8
زبان نوشته شده در فایل: فارسی
متن نوشته شده در فایل: این یک تست است
کد استفاده شده:

System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = Encoding.UTF8;
richTextBox1.Text = wc.DownloadString("http://dl.rosesoftware.ir/Test/Persian-UTF8.txt");


خروجی نمایش داده شده پس از اجرای کد بالا:

این یک تست است


خوب فارسی درست شده الان،حالا میریم تست انگلیسی...


1-
نوع فرمت فایل: UTF8
زبان نوشته شده در فایل: انگلیسی
متن نوشته شده در فایل: hello
کد استفاده شده:

System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = Encoding.UTF8;
richTextBox1.Text = wc.DownloadString("http://dl.rosesoftware.ir/Test/English-UTF8.txt");

if (richTextBox1.Text == "hello")
{
MessageBox.Show("برابر است");
}
else
{
MessageBox.Show("برابر نیست");
}


خروجی نمایش داده شده پس از اجرای کد بالا:

hello


متن پیغام شرط: برابر نیست.....






خوب مشکل کجاست که درون فایل hello نوشته شده و همچنین پس از خوندن فایل و نمایش در تکست باکس کلمه hello نوشته شده اما درون شرط گفته میشه برابر نیست؟
مشکل چیه من دیگه مغزم نمیکشه دوستان لطفا راهنمایی کنید

R2du-soft
یک شنبه 03 مرداد 1395, 03:50 صبح
دوستان یک باگ پیدا کردم (باگ = کاراکتر اضافی Space بعد از خوندن فایل)

فایل زمینه رو دانلود و تست کنید متوجه میشید:
141625

بعد از خوندن فایل یک کاراکتر Space یا همونم فضای خالی به اول رشته خونده شده اضافه میکنه که باعث میشه رشته خونده شده و درج شده با هم برابری نداشته باشن...
این باگ حساب میشه؟چطور میشه باگ رو گزارش داد؟

Mahmoud.Afrad
یک شنبه 03 مرداد 1395, 05:48 صبح
دلیلش رو در لینک زیر میتونید بخونید
http://stackoverflow.com/a/4716548
و این رو هم بگم در دات نت های ورژن 3.5 و ماقبل این اتفاق میافتد و در ورژن 4 به بعد اصلاح شده.

به صورت زیر هم میتونید عمل کنید.
Uri uri = new Uri(@"http://dl.rosesoftware.ir/Test/English-UTF8.txt");
WebClient webClient = new WebClient();
string strContent = null;
using (Stream stream = webClient.OpenRead(uri))
{
if (stream != null)
{
using (StreamReader streamReader = new StreamReader(stream))
{
strContent = streamReader.ReadToEnd();
}
}
}
richTextBox1.Text = strContent;
if (strContent == "hello")
{
MessageBox.Show(@"برابر است");
}
else
{
MessageBox.Show(@"برابر نیست");
}

NasimBamdad
یک شنبه 03 مرداد 1395, 15:49 عصر
دلیلش رو در لینک زیر میتونید بخونید
http://stackoverflow.com/a/4716548
و این رو هم بگم در دات نت های ورژن 3.5 و ماقبل این اتفاق میفاته و در ورژن 4 به بعد اصلاح شده.

به صورت زیر هم میتونید عمل کنید.
Uri uri = new Uri(@"http://dl.rosesoftware.ir/Test/English-UTF8.txt");
WebClient webClient = new WebClient();
string strContent = null;
using (Stream stream = webClient.OpenRead(uri))
{
if (stream != null)
{
using (StreamReader streamReader = new StreamReader(stream))
{
strContent = streamReader.ReadToEnd();
}
}
}
richTextBox1.Text = strContent;
if (strContent == "hello")
{
MessageBox.Show(@"برابر است");
}
else
{
MessageBox.Show(@"برابر نیست");
}

سلام و وقت بخیر

کد خیلی خوبی بود . فقط مشکلی دارم .

مشکلم اینه که وقتی که متن فایل رو تغییر میدم ، دیگه مقدارش کش شده و مقدار قبلی رو فقط میخونه
چه طوری میشه کش رو حالی کرد ؟

NasimBamdad
یک شنبه 03 مرداد 1395, 16:03 عصر
از این کد استفاده کردم و مشکلم حل شد

webClient.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cac he.RequestCacheLevel.NoCacheNoStore);