PDA

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



Sir-Programmer
یک شنبه 26 آذر 1391, 11:56 صبح
سلام دوستان یه برنامه ساده نوشتم که آدرس سایت رو میگیره و Title یا عنوانشو بهت میده واسه سایت های English کار میکنه و عنوان سایت رو میگیره ولی واسه عنوان فارسی یه متن .... میده فک کنم باید متن رو تبدیل به UTF8 کنم ولی نمی دونم چیکار کنم ممنون میشم کمک کنید تشکر !

واسه سایت FA !96761

واسه سایت En !96762

behzadkhatari
یک شنبه 26 آذر 1391, 12:07 عصر
WebResponse response = null;
string line = string.Empty;

try
{
WebRequest request = WebRequest.Create(url);
request.Timeout = timeout;

response = request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

while(streamRead.EndOfStream != true)
{
line = streamRead.ReadLine();
if (line.Contains("<title>"))
{
line = line.Split(new char[] { '<', '>' })[2];
break;
}
}
}
catch (Exception) { }
finally
{
if (response != null)
{
response.Close();
}
}

return line;

harani
یک شنبه 26 آذر 1391, 12:13 عصر
اگه میبینید فونت ها هچل هفته میشه برای اینکه شما فونت مورد نظرو تو سیستمان ندارین .

Sir-Programmer
یک شنبه 26 آذر 1391, 12:15 عصر
ممنون که جواب دادی ولی ارور داد

Error 1 The name 'timeout' does not exist in the current context F:\Programming\C Sharp\Net\GetWebPageTitle\Form1.cs 30 27 GetWebPageTitle

behzadkhatari
دوشنبه 27 آذر 1391, 12:24 عصر
ممنون که جواب دادی ولی ارور داد

Error 1 The name 'timeout' does not exist in the current context F:\Programming\C Sharp\Net\GetWebPageTitle\Form1.cs 30 27 GetWebPageTitle

timeout رو یه عدد قرار بده. این زمان پاسخ به ثانیه است

aradrobo
سه شنبه 24 بهمن 1391, 19:03 عصر
من بدین صورت نوشتم ولی کار نکرد :

public string title(string url)
{
WebResponse response = null;
string line = string.Empty;

try
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 3;

response = request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

while (streamRead.EndOfStream != true)
{
line = streamRead.ReadLine();
if (line.Contains("<title>"))
{
line = line.Split(new char[] { '<', '>' })[2];
break;
}
}
}
catch (Exception) { }
finally
{
if (response != null)
{
response.Close();
}
}

return line;
}
private void btnutf_Click(object sender, EventArgs e)
{
// textBox1.Text = System.Web.HttpUtility.UrlEncode(txtSorce.Text);

textBox1.Text = title("http://www.aradrobo.com");
}

SHD.NET
سه شنبه 24 بهمن 1391, 19:25 عصر
اگه میخواین تایتل رو بگیرین از روش زیر استفاده کنید، روی سایت های فارسی خودم قبلا توی یکی از برنامه هام تست کردم! 100 درصد کار می کنه!!

WebBrowser Webbrowser1 = new WebBrowser();
WebBrowser1.Navigate("http://www.vcp.ir/");
TextBox1.Text = WebBrowser1.DocumentTitle;

**یاحق**

SHD.NET
سه شنبه 24 بهمن 1391, 19:29 عصر
البته روش بالا جواب نمیده (الان یادم افتاد)، چون باید اول سایت کامل لود شه و بعدش تایتل نمایش داده بشه!!!

ابتدا یه وب براوزر و یک تکست باکس روی فرم بزارین و طبق کدهای زیر عمل کنید:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.vcp.ir");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
textBox1.Text = webBrowser1.DocumentTitle;
}


موفق باشید

Mahmoud.Afrad
سه شنبه 24 بهمن 1391, 20:51 عصر
میتونید از متد زیر استفاده کنید:

private string GetWebPageTitle(string address)
{
string title = null;

using (WebClient w = new WebClient())
{
using (Stream myStream = w.OpenRead(address))
{
using (StreamReader myStreamReader = new StreamReader(myStream))
{
while (!myStreamReader.EndOfStream)
{
string line = myStreamReader.ReadLine();

Regex myRegex = new Regex("<title>.*</title>", RegexOptions.IgnoreCase);
if (myRegex.IsMatch(line))
{
Match m = myRegex.Match(line);
int startPos = m.Value.IndexOf('>')+1;
title =m.Value.Substring(startPos,m.Value.Length - startPos - 8);
break;
}
else if (Regex.IsMatch(line, "<title.*/>", RegexOptions.IgnoreCase))
{
Match m = Regex.Match(line, "title=\".*\"", RegexOptions.IgnoreCase);
if (m != null)
{
title = m.Value.Substring(7, m.Length - 8);
break;
}
}
}
}
}
}

return title;
}

fakhravari
سه شنبه 24 بهمن 1391, 23:10 عصر
public static string GetWebPageTitle(string url)
{
string title = "";
try
{
HttpWebRequest request = (HttpWebRequest.Create(url) as HttpWebRequest);
HttpWebResponse response = (request.GetResponse() as HttpWebResponse);

using (Stream stream = response.GetResponseStream())
{
Regex titleCheck = new Regex(@"<title>\s*(.+?)\s*</title>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
int bytesToRead = 8092;
byte[] buffer = new byte[bytesToRead];
string contents = "";
int length = 0;
while ((length = stream.Read(buffer, 0, bytesToRead)) > 0)
{
contents += Encoding.UTF8.GetString(buffer, 0, length);
Match m = titleCheck.Match(contents);
if (m.Success)
{
title = m.Groups[1].Value.ToString();
break;
}
else if (contents.Contains("</head>"))
{
break;
}
}
}

return title;
}
catch
{
return title;
}
}