2016-07-04 2 views
1
페르시아어

나는 등 그 페르시아 문자가있는 URL에서 HTML 콘텐츠를 얻기 위해 노력하고 같은 유니 코드 문자에 URL을 작동하지 않습니다 :WebClient.DownloadString (URL) 등

http://example.com/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A2%D8%AA%D9%84%DB%8C%D9%87/website/Atelier

이 코드를 사용하고 있습니다 :

using (WebClient client = new WebClient()) 
{ 
    client.Encoding = Encoding.UTF8; 
    string data = client.DownloadString(urlTextWithPersianCharacters); 
} 

URL이 같은 일이, 내가 읽을 수없는 문자와 기호를 얻을. 이 코드는 영어 URL과 페르시아어 콘텐츠가있는 다른 웹 사이트에서도 사용할 수 있습니다.

편집 : 두 답변은 다른 웹 사이트를 테스트하고 있습니다. 문제는 특정 웹 사이트에서 해당 콘텐츠를 얻으려고하는 것입니다. 웹 사이트가 이러한 종류의 요청을 차단할 수 있습니까? 아니면 다른 인코딩을 사용할 수 있습니까?

내가 무엇을 제안합니까?

+0

방금 ​​테스트했는데 코드를 사용하여 올바른 페르시아어 문자를 봅니다. –

+0

당신은'data' 문자열에 말도 안되는 문자와 기호를 얻지 못한다는 것을 의미합니까? – roostaamir

+0

아니요, 나는 적절한 페르시아 문자를 얻습니다. 나는 notepad ++와 google chrome을 사용하여 그것을 열려고 노력한다. 둘 다 적절한 페르시아 문자를 보여줍니다. –

답변

0

기본값 인 System.Text.UTF8Encoding 클래스는 UTF-8 형식의 직접 이진 디코딩 만 수행 할 수 있습니다. 예를 들어, "URL 인코딩"을 사용하는 URL을 디코딩하려고 시도하고 있습니다.

특수 문자를 % 기호가있는 16 진수 인코딩을 사용하여 URL로 인코딩 할 때 URL 인코딩이 발생합니다.

이 문제를 해결하려면 URL을 UTF-8 문자열로 디코딩해야합니다.

System.Net.Uri.UnescapeDataString() 방법은이 방법을 사용할 수 있습니다. 이 예에서

string url = "http://example.com/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A2%D8%AA%D9%84%DB%8C%D9%87/website/Atelier"; 
string result = Uri.UnescapeDataString(url); 

는, 결과는 포함 http://example.com/طراحی-وب-سایت-آتلیه/website/Atelier

편집 : 내가 몇 가지 조사를하고 어떻게 WebClientWebRequest 핸들 문자 인코딩에 차이가있는 것을 보았다. Link to relevant article.

WebClient에서 전환하고 WebRequest을 사용하여 인코딩 문제가 해결되는지 확인하십시오.

+0

또한 Uri.UnescapeDataString (URL)을 시도했지만 여전히 작동하지 않습니다. – roostaamir

+0

제 첫 번째 접근 방식은'WebRequest'와'WebResponse' 였는데 거기에서도 같은 결과가있었습니다 !!! – roostaamir

0

는 URI에 URL 문자열을 변환하려고 :

 Uri uri = new Uri("http://example.com/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A2%D8%AA%D9%84%DB%8C%D9%87/website/Atelier"); 
using (WebClient client = new WebClient()) 
{ 
    client.Encoding = Encoding.UTF8; 
    string data = client.DownloadString(uri); 
} 
+0

did not work :( – roostaamir

+0

나는 코드를 시험해보고 작동한다 : <메타 캐릭터 = "UTF-8"> <메타 이름 = "뷰포트"내용 = "폭 = 기기 폭 초기 스케일 = 1 "/> طراحی وب سایت آتلیه ... 더 HTML ... – Daniel

+0

사용하는이 정확히 같은 코드? 너무 이상해. – roostaamir

0

많은 방법과 해결책이 있습니다. 어떤 것이 당신의 필요에 맞는 것인지 시도하십시오.

string testString = "http://test# space 123/text?var=val&another=two"; 
Console.WriteLine("UrlEncode:   " + System.Web.HttpUtility.UrlEncode(testString)); 
Console.WriteLine("EscapeUriString: " + Uri.EscapeUriString(testString)); 
Console.WriteLine("EscapeDataString: " + Uri.EscapeDataString(testString)); 
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+")); 

Console.WriteLine("HtmlEncode:  " + System.Web.HttpUtility.HtmlEncode(testString)); 
Console.WriteLine("UrlPathEncode:  " + System.Web.HttpUtility.UrlPathEncode(testString)); 

//.Net 4.0+ 
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString)); 
Console.WriteLine("WebUtility.UrlEncode: " + WebUtility.UrlEncode(testString)); 
관련 문제