Bu konuda çok fazla soru sorulduğu için makale olarak yazmakta fayda gördüm.
XmlHTTP ile veri çektiğiniz zaman türkçe karakter ler düzgün çıkmamaktadır.Bunun nedeni veriyi alırken "text" yöntemi ile alınıyor olması.Bunun yerine "Body" biçiminde alıcaz.Fakat bu veriyi ekrana yazdırırken sadece ? çıktığını görürsünüz.Bunun nedeni aldığınız verinin Binary olmasıdır.Bu binary'yi bir fonksiyon ile Text e çevirebilirsiniz.Bu şekilde kullanılırsa XmlHTTP de Türkçe karakter problemi ortadan kalkmaktadır.Çok fazla uzatmadan örnekle açıklayalım.
Normalde XmlHTTP ile veri alınırken :
<%
strURL = "http://www.asprehberi.net/"
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXmlHttp.Open "GET" , strURL , false
objXmlHttp.sEnd
strHTML = objXmlHttp.ResponseText
%>
gibi bir kod kullanırız.Bu kod ile veri alırsanız Türkçe karakterlerinizin ? şeklinde çıktığını görürsünüz.Bunun yerine BinaryToText isminde bir fonksiyon kullanacağız.
Fonksiyonumuz aşağıdadır.
******************** Fonksiyon Başlangıcı ********************
<%
Private Function BinaryToString(Binary)
Dim cl1, cl2, cl3, pl1, pl2, pl3
Dim L
cl1 = 1
cl2 = 1
cl3 = 1
L = LenB(Binary)
Do While cl1<=L
pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
cl1 = cl1 + 1
cl3 = cl3 + 1
If cl3>300 Then
pl2 = pl2 & pl3
pl3 = ""
cl3 = 1
cl2 = cl2 + 1
If cl2>200 Then
pl1 = pl1 & pl2
pl2 = ""
cl2 = 1
End If
End If
Loop
BinaryToString = pl1 & pl2 & pl3
End Function
%>
******************** Fonksiyon Bitişi ********************
Bu fonksiyonu kullanmanız yeterli olmuyacaktır.Veri alırken üstte aldığımız gibi "ResponseText" yerine "ResponseBody" şeklinde alınması gerekiyor.Hepsini tek bir kod ile birleştirmek gerekirse
******************** Örnek Kod Başlangıç ********************
<%
strURL = "http://www.asprehberi.net/"
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXmlHttp.Open "GET" , strURL , false
objXmlHttp.sEnd
strHTML = objXmlHttp.ResponseBody
Private Function BinaryToString(Binary)
Dim cl1, cl2, cl3, pl1, pl2, pl3
Dim L
cl1 = 1
cl2 = 1
cl3 = 1
L = LenB(Binary)
Do While cl1<=L
pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
cl1 = cl1 + 1
cl3 = cl3 + 1
If cl3>300 Then
pl2 = pl2 & pl3
pl3 = ""
cl3 = 1
cl2 = cl2 + 1
If cl2>200 Then
pl1 = pl1 & pl2
pl2 = ""
cl2 = 1
End If
End If
Loop
BinaryToString = pl1 & pl2 & pl3
End Function
Response.Write BinaryToString(strHTML)
%>
******************** Örnek Kod Bitiş ********************
En son yazılırken dikkat edeceğiniz üzere fonksiyonu kullanarak bu veriyi ekrana yazdırdık.Eğer kullanmaz iseniz bütün karakterleri ? şeklinde görürsünüz.
Bu şekilde XmlHTTP Türkçe karakter problemi ortadan kalkmaktadır.İyi kullanımlar.