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 הרצוי