Forum: D Programlama Dili RSS
get() ile Türkçe karakter sorunu
zafer #1
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: get() ile Türkçe karakter sorunu
Merhaba,

get() işlevi ile web üzerinden xml bilgisi alıyorum. İşlemde bir sıkıntı yok ancak Türkçe karakterlerde sorunlar var. Örneğin XML içindeki Türkçe karakterli metinler aşağıdaki gibi görünüyor.

<venueCountry>Türkiye</venueCountry>
<date>25 Şubat 2017 20:00</date>
<subCategory>Müzikli Gösteri</subCategory>
<venueCity>Ä°stanbul</venueCity>

Burada gösterilen çözümü denedim ama malesef sonuç başarısız. Tarayıcı üzerinden ilgili adresi açınca herhangi bir sorun görünmüyor. Ancak get() ile alınan veri bu şekilde. Bu sorunu nasıl aşabilirim?
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4515 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence yine de belgenin kullandığı kodlama ile ilgili ve bence yine bir şekilde std.encoding ile çözülecek. XML belgesi hangi kodlamayı kullanıyor? transcode'u deneyebiliriz:

  https://dlang.org/phobos/std_encoding.html#.transcode

Ali
zafer #3
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet transcode sorunumu çözdü. Ancak tam olarak ne olduğunu anlamadım. Kodlar aşağıda nasıl oldu da transcode kodları düzeltti?

import std.net.curl;
import std.encoding;
 
void main()
{
    char[] xmlVeri = get("http://www...");
 
    Latin1String latin1Veri;
 
    transcode(xmlVeri.idup, latin1Veri);
    string veri = cast(string) latin1Veri;
    
    writeln(veri);
}
https://github.com/zafer06 - depo
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4515 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
transcode yapacağı dönüşümü verilen parametrelerden anlıyor. Modülü inceleyince şunları görüyoruz:

Latin1Char aslında ubyte olan yeni bir tür, Latin1String de onun bir dizisi:
/** Defines an Latin1-encoded character. */
enum Latin1Char : ubyte { init }
/**
Defines an Latin1-encoded string (as an array of $(D
immutable(Latin1Char))).
 */
alias Latin1String = immutable(Latin1Char)[];
transcode, EncoderInstance gibi şablonların Latin1Char özellemelerinden yararlanıyor:
template EncoderInstance(CharType : Latin1Char)
{
    // ...
}
Tam okuyup çözmedim ama gereken bilgiler türlerde zaten gizli. D de bu bilgilerden yararlanmaya derleme zamanında olanak veriyor. :)

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-10-23, 15:26:10 (UTC -07:00)