WebRequest ile http adreslerinden bazı verileri elde edip üzerinde işlemler yapmamız gereken durumlar olabiliyor bu gibi durumlarda eğer elde etmek istediğiniz içerik içerisinde Türkçe karakter mevcut ise ve bu türkçe karakterleri düzgün biçimde elde edemiyorsanız Encoding kullanımıyla kolayca bu sorunu aşabilirsiniz.
HttpWebRequest ve WebRequest Türkçe Karakter Sorunu Çözümü
Bu sorunun çözümü için yapmanız gereken tek şey Request nesnenize ait GetResponse() metodu yardımıyla elde ettiğiniz Stream nesnesini StreamReader sınıfı ile okumaya çalışırken Encoding parametresinin yer aldığı bir constructor’a Encoding.GetEncoding("iso-8859-9")
kodu ile ISO-8859-9
türündeki encoding’i elde edip constructor’ın sizden istediği Encoding’i sorunsuz şekilde vermiş olursunuz şimdi StreamReader’ın kullanabileceğimiz constructor’larına gözatalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Threading.Tasks; namespace System.IO { public class StreamReader : TextReader { public static readonly StreamReader Null; public StreamReader(Stream stream); public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks); public StreamReader(Stream stream, Encoding encoding); public StreamReader(string path, bool detectEncodingFromByteOrderMarks); public StreamReader(string path, Encoding encoding); public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks); public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks); public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize); public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize); public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen); } } |
Kullanmış olduğumuz public StreamReader(Stream stream, Encoding encoding);
constructor’ı üstteki kodda seçili olarak gösterilmiştir.
Şimdi kullanacağımız örnek encoding ve üstteki kullanacağımızı söylediğimiz constructor ile hazırladığımız örnek kod bloğu altta mevcuttur.
Örnek Kod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System; using System.Net; using System.IO; using System.Text; using System.Xml; public class Program { public static void Main() { var xdoc = new XmlDocument(); var request = HttpWebRequest.Create("https://www.aksam.com.tr/cache/rss.xml") as HttpWebRequest; request.ContentType = "text/xml"; var response = request.GetResponse() as HttpWebResponse; var stream = response.GetResponseStream(); var streamReader = new StreamReader(stream, Encoding.GetEncoding("iso-8859-9")); var result = String.Empty; while (!streamReader.EndOfStream) result += streamReader.ReadLine(); xdoc.LoadXml(result); var el = (XmlElement)xdoc.SelectSingleNode("/rss"); var channel = el.SelectSingleNode("channel"); var nodes = channel.SelectNodes("item"); Console.WriteLine(nodes[6].SelectSingleNode("description").InnerText); } } |
Üstteki kod bloğununun Encoding’li ve Encoding’siz halini demo olarak altta görebilirsiniz.
Demo
Başka bir makalede görüşmek dileğiyle olumlu, olumsuz tüm geri dönüşlerinizi yorum olarak bırakmayı unutmayınız.