Thread overview
Curl:Unrecognized Encoding: ISO-8859-9
Jun 19, 2014
huseyin
Jun 19, 2014
agora
Jun 21, 2014
huseyin
June 19, 2014

Merhabalar

Curl ile veri çekerken normal bir sitede direkt veriyi

auto content = get(url);

şeklinde alabiliyorum ve kaynak kod verimli bir şekilde elimde oluyor. Ancak bazı sitelerde(charsetleri ISO-8859-9 olanlarda denendi) bu hata dönüyor ve program kapanıyor ne yapmam gerektiğini bilmiyorum.
Yardımlarınız için teşekkür ederim

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

June 19, 2014

Ali hocam

bahsi geçen charset'li bir site

http://www.r10.net/

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

June 19, 2014

Program şöyle herhalde:

import std.net.curl;

pragma(lib, "curl");

void main()
{
   auto url = "ddili.org";
   auto content = get(url);
}

O hatayı gösteren bir URL söyler misin.

Ali

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

June 19, 2014

Bu, std.net.curl'ün kullandığı std.encoding'in bir kısıtlaması. Desteklenen kodlamalar arasında o kodlama bulunmuyor: UTF-8, UTF-16, UTF-32, ASCII, ISO-8859-1 (also known as LATIN-1), and WINDOWS-1252.

Ancak, register() işlevi ile yeni kodlamalar öğretilebiliyormuş:

http://dlang.org/phobos/std_encoding.html#.EncodingScheme.register

Bunun kolay bir iş olup olmadığını henüz bilmiyorum. :-/

Ali

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

June 19, 2014

Sanırım şöyle bir şey olması lazım:

import std.stdio;
import std.encoding;
import std.net.curl;

pragma(lib, "curl");

class EncodingSchemeLatin5 : EncodingSchemeLatin1
{
   shared static this()
   {
       EncodingScheme.register(__MODULE__ ~ ".EncodingSchemeLatin5");
   }

   const
   {
       override string[] names()
       {
           return
           [
               cast(string)
               "CP819",
               "IBM819",
               "ISO-8859-9",
               "ISO_8859-9",
               "ISO_8859-9:1987",
               "csISOLatin5",
               "iso-ir-900",
               "l5",
               "latin5"
           ];
       }

       override string toString()
       {
           return "ISO-8859-9";
       }

       override size_t encode(dchar c, ubyte[] buffer)
       {
           switch (c) {
           case '\u011e' : buffer[0] = 208; return 1;
           case '\u0130' : buffer[0] = 221; return 1;
           case '\u015e' : buffer[0] = 222; return 1;
           case '\u011f' : buffer[0] = 240; return 1;
           case '\u0131' : buffer[0] = 253; return 1;
           case '\u015f' : buffer[0] = 254; return 1;
           default:
               return super.encode(c, buffer);
           }
       }

       override dchar decode(ref const(ubyte)[] s)
       {
           switch (s[0]) {
           case 208 : return '\u011e';
           case 221 : return '\u0130';
           case 222 : return '\u015e';
           case 240 : return '\u011f';
           case 253 : return '\u0131';
           case 254 : return '\u015f';
           default:
               return super.decode(s);
           }
       }
   }
}

void main()
{
   auto url = "http://www.r10.net/";//"ddili.org";
   auto content = get(url);
   writeln(content);
}

Ali

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

June 21, 2014

Evet bu son verdiğiniz her şeyi karşıladı. Şuanda hiçbir sorun yok teşekkür ederim :)

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