DCSIMG
Set for WebClient.Encoding 1255 - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Set for WebClient.Encoding 1255

 

בתפוז נשאלה השאלה הבאה:
 
איך אפשר לגרום ל - WebClient לשלוח בקשה עם Encoding של 1255 ולא utf8.
 
בהתחלה מישהו אמר שאפשר להשתמש במאפיין Encoding - כלומר הקוד הבא:
 

WebClient client = new WebClient();

client.Encoding = Encoding.GetEncoding(1255);

string str = client.DownloadString(http://www.google.co.il);

 
 
משום מה זה לא עבד - מעיון קצר ב - Reflector מסתבר שהמאפיין הזה משפיע אך ורק על תרגום הבתים שחוזרים מהבקשה, כלומר מאחורי הקלעים מפעילים את המתודה DownloadByte וכדי לדעת באיזה Encoding לתרגם את התוצאה משתמשים במאפיין Encoding - כלומר אין שום קשר בין ההגדרה של המאפיין לבין שליחת ה - Request ב - Encoding הרצוי.
 
הנה חלק מהקוד שרץ עבור DownloadString
 

try

{

    WebRequest request;

    byte[] bytes = this.DownloadDataInternal(address, out request);

    string retValue = this.GuessDownloadEncoding(request).GetString(bytes);

}

 
בשורה השנייה הם מורידים מערך של בתים ויוצרים את ה - Request ובשורה הבאה הם מחזירים string לפי ה - encoding שבחרנו.
 
 
אז כדי לקבוע את ה - Encoding שבה נרצה לשלוח את ה - request צריך להשתמש ב - headers בצורה הבאה:
 
 

WebClient client = new WebClient();

client.Headers.Add(HttpRequestHeader.ContentType, "charset=windows-1255");

string str = client.DownloadString(http://www.google.co.il);

 
ואז למעשה ה - request ישלח ב - encoding הרצוי
פורסם: Sep 30 2009, 08:47 PM by Shlomo | with 4 comment(s)

תוכן התגובה

Avi Pinto כתב/ה:

אחלה פוסט, תודה

# October 1, 2009 12:10 AM

גיא כתב/ה:

תודה, עזרת לי :)

# December 3, 2009 5:31 PM

אלון כתב/ה:

שלום לך שלמה,

אנחנו משתמשים בטכנולוגית שירות.

ואחד מהם מקבל את הפרמטרים ששולחים בקידוד הנכון.

וכאשר התשובה מתקבלת - לא מתקבלת בקידוד הנכון - ונכשל.

לקליינט אין ניימספייס של אינקודינג...

# May 15, 2011 10:59 AM

Ambious כתב/ה:

אני רוצה לקחת הפסקה בסדרת הפוסטים שלי טלפון חלונות 7 כדי לשתף איתכם כלי מדהים שנתקלתי בו במהלך המחקר

# March 14, 2012 11:46 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 2 and 1 and type the answer here:


Enter the numbers above: