Thread overview
get() ile Türkçe karakter sorunu
Dec 28, 2016
zafer
Jan 16, 2017
zafer
December 29, 2016

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 (http://ddili.org/forum/thread/1385) 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?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 29, 2016

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 16, 2017

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);
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 17, 2017

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]