VBA ile oluşturulan XML de türkçe problemi

Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR
Arkadaşlar ;

iki program arasında veri transferi amacıyla UTF-8 formatın da xml dosyaları oluşturuyorum. Ancak oluşturduğum xml dosyalarındaki Türkçe karakerler nedeniyle ne tarayıcılarda görüntüleyebiliyor nede ikinci programa yedirebiliyorum. Bu madana sanırım xml dosyasının kodlamasın da bir hata var ama bunu nasıl düzelte bileceğime dair ciddi bir kaynak bulamadım. Yardımcı olur musunuz.

Not : Eğer tam anlaşılamadıysa örnek dosya yükleye bilirim.

Yardımlarınız için şimdiden teşekkür ederim..
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Dosyanızı ve kodlarınızı görebilir miyiz ?
 
Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR
Buyrun Excel ve xml dosyaları sıkıştırılmış dosyanın içerisinde görebilirsiniz.
 

Ekli dosyalar

Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Doğru encoding kullanın.

"windows-1254" veya "iso-8859-9" (tavsiyem) birini kullanın.

Ekte, yaptığım küçük bir programın yapılandırma ayarlarını saklayan xml i inceleyebilirsiniz. "Tag" isimlerinin Türkçe harfler içerebildiğini görebilirsiniz.
 

Ekli dosyalar

Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Evet 2 gün önce site kapanmış.
NOT: Bu alan adının süresi 26.04.2014 tarihinde dolmuştur. Yenilenmesi veya silinmesi bekleniyor.
Google'a xml utf-8 Türkçe karakter sorunu yazıp aratırsanız; bu konuda birçok sayfa listelenecektir.
Çözümü burada da paylaşırsanız seviniriz.
 
Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR
Kaç günden beri bu konuda arama yapa yapa başım ağrıdı inanın. En son buraya yazmaya karar vermiştim. Anladığım kadarıyla şu anki teknoloii bu işe çözüm getiremiyor. :)

Bu arada Zeki bey, import edilecek program maalesef öncelikle UTF-8 formatında olup olmadığını kontrol ediyor. Bu ısrarın sebebi anlamış değilim. Ben Türkçe karakterleri ing. karakterlerle replace ederek çözüm bulmaya çalışıyorum ama buda çok şık olmuyor. Bu manada programda örnek hazırlanan XML dosyaları Türkçe karakter desteklerken benim hazırladığım XML dosyaları Türkçe karakterleri neden desteklemediği bir türlü anlayamıyorum....
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
UTF-8 byte kodlaması aşağıdaki gibi başlar:

Kod:
arr = {239, 0, 187, 0, 191, 0}
İlk yazdırmayı bu şekilde başlatırsanız, oluşan xml dosyası gerçek anlamda utf-8 olacaktır. Bunu doğrulamak için oluşan xml dosyasını açdığınızda "Farklı kaydet" penceresini çağırın "ANSI" yerine "UTF-8" olarak geldiğini aşağıdaki resimde olduğu gibi görebilirsiniz.



Test için aşağıdaki kodu kullanın:

Kod:
Sub utf_test()
    Dim arrUTF8(1 To 6) As Byte, utf As String, xml As String
    
    xml = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf
    xml = xml & "<root>" & vbCrLf
    xml = xml & "  <child>deneme</child>" & vbCrLf
    xml = xml & "</root>"
    
    arrUTF8(1) = 239
    arrUTF8(3) = 187
    arrUTF8(5) = 191
    
    utf = arrUTF8
    
    [COLOR=DarkGreen]' Satır kaymaması için ilk olarak binary modda yazıyoruz.
    ' Görünmeyen karakter olarak yazdırır[/COLOR].[COLOR=DarkGreen] Output & Print
    ' kullanırsanız ilk satır boş (görünmez karakter mevcut) olacaktır.[/COLOR]
    Open "C:\utf-8.xml" For Binary As #1
        Put #1, 1, utf
    Close #1
    
    [COLOR=DarkGreen]' Kodlamanın bozulmaması için "Append", yani dosyaya
    ' ilave et modunda yazdırıyoruz. Output kullanırsanız
    ' yukarıdaki utf kodlarını silecek ve yine ANSI olacaktır.[/COLOR]
    Open "C:\utf-8.xml" For Append As #1
        Print #1, xml
    Close #1
End Sub
Elbette utf-8 kodlaması için alternatif metot olarak "adodb.stream" de kullanabiliriz. Mantığı kavramanız için "ilkel" olanı gösterdim. :)

Yazdıklarınıza (programınızın kabul edebileceği text kodlaması) bakarak ilk satırda geçen "<?xml version... " şeklindeki satırın bile gereksiz olduğunu düşünüyorum.
.
.
.
.
 

Ekli dosyalar

Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR
"adodb.stream" yöntemiylede bir örnek verebilirmisiniz. Eğer zahmet olmaz ise....
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
"adodb.stream" yöntemiylede bir örnek verebilirmisiniz. Eğer zahmet olmaz ise....
Elbette. İki türlü kullanabilirsiniz. Aşağıdaki prosedurleri inceleyin.

Kod:
Sub Stream_1()
  [COLOR=DarkGreen]  ' Direkt belleğe yazdırarak[/COLOR]
    Dim oStr As Object, xml As String
    
    Set oStr = CreateObject("ADODB.Stream")
    
    xml = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf
    xml = xml & "<root>" & vbCrLf
    xml = xml & "  <child>deneme</child>" & vbCrLf
    xml = xml & "</root>"
    
    oStr.Charset = "utf-8"
    oStr.Open
    [COLOR=Red][B]oStr.WriteText xml[/B][/COLOR]
    oStr.SaveToFile "c:\utf-8.xml", 2[COLOR=DarkGreen] ' overwrite[/COLOR]
    oStr.Flush
    oStr.Close
    
    Set oStr = Nothing
End Sub
Kod:
Sub Stream_2()
   [COLOR=DarkGreen] ' Kayıtlı bir dosyayı yükleyerek[/COLOR]
    Dim oStr As Object, xml As String
    
    Set oStr = CreateObject("ADODB.Stream")
    
    xml = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf
    xml = xml & "<root>" & vbCrLf
    xml = xml & "  <child>deneme</child>" & vbCrLf
    xml = xml & "</root>"
    
    Open "c:\utf-8.xml" For Output As #1
        Print #1, xml
    Close #1
    
    oStr.Charset = "utf-8"
    oStr.Open
    [COLOR=Red][B]oStr.LoadFromFile "c:\utf-8.xml"[/B][/COLOR]
    oStr.SaveToFile "c:\utf-8.xml", 2[COLOR=DarkGreen] ' overwrite[/COLOR]
    oStr.Flush
    oStr.Close
    
    Set oStr = Nothing
End Sub
 
Katılım
11 Temmuz 2006
Mesajlar
36
Excel Vers. ve Dili
2010 TR
Tüm arkadaşlar, yardımlarınız için çook teşekkür ederim. Problem "adodb.stream" töntemi ile çözülmüştür. Bana ayırdığınız kıymetli vakitlerinizden dolayı hakkınızı helal edin lütfen... Özellikle Zeki bey size çok teşekkür ederim.....
 
Üst