Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Indy IdHTTP Unicode

[es] :: Pascal / Delphi / Kylix :: Indy IdHTTP Unicode

[ Pregleda: 3023 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Indy IdHTTP Unicode10.11.2010. u 15:18 - pre 163 meseci
Dakle ovako, radi se o D2009 i Indy verzija 10.5.7

Ubijaju me Unicode karakteri :(

Imam slijedeći kod (koji mi naravno ne radi dobro)


Code:


procedure TForm2.Button1Click(Sender: TObject);
var
Url, Str : string;
WStr : WideString;
begin
Url := 'http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|hr';
Str := IdHTTP1.Get(Url);
WStr := Str;
Edit1.Text := WStr;
end;



E sad ja bih trebao dobiti ovo: "{"responseData": {"translatedText":"domaće zadaće"}, "responseDetails": null, "responseStatus": 200}"

ali na žalost dobijem ovo: "{"responseData": {"translatedText":"domaće zadaće"}, "responseDetails": null, "responseStatus": 200}"

Ima li netko ideju kako ovo riješiti?

Ovo je cijeli link:

[url=http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=homework&langpair=en|hr]http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=homework&langpair=en|hr[/url]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Indy IdHTTP Unicode10.11.2010. u 16:15 - pre 163 meseci
> E sad ja bih trebao dobiti ovo: "{"responseData": {"translatedText":"domaće zadaće"}, "responseDetails": null, "responseStatus": 200}"
> ali na žalost dobijem ovo: "{"responseData": {"translatedText":"domaće zadaće"}, "responseDetails": null, "responseStatus": 200}"
> Ima li netko ideju kako ovo riješiti?

Da to nije enkodovan tekst, možda UTF8.


 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode10.11.2010. u 17:04 - pre 163 meseci
Ma svakakva cudesa sam probavao, ali na zalost nista nije pomoglo :(
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Indy IdHTTP Unicode10.11.2010. u 18:19 - pre 163 meseci
> Ma svakakva cudesa sam probavao, ali na zalost nista nije pomoglo :(

UTF8 decoding verovatno nisi.

Code:

var
  Temp: string;
  http: TIdHttp;
begin
  Temp := 'http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|sr';

  http := TIdHttp.Create(nil);
  try
    Temp := http.Get(Temp);
    Memo1.Lines.Add(Utf8Decode(Temp));
  finally
    http.Free;
  end;

 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode10.11.2010. u 19:48 - pre 163 meseci
Na zalost to ne radi :( opet dobijem ? umjesto ć

"{"responseData": {"translatedText":"doma?e zada?e"}, "responseDetails": null, "responseStatus": 200}"
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Indy IdHTTP Unicode10.11.2010. u 22:39 - pre 163 meseci
> Na zalost to ne radi :( opet dobijem ? umjesto ć

Radi ako imaš unicode kontrole (recimo TNTMemo) i odgovarajući font (npr. Arial).
 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode11.11.2010. u 06:45 - pre 163 meseci
Huh :( a sta ako ne koristim te kontrole (za font nije problem), pa zar se nebi D2009 trebao brinuti o tome? Pa zar nije on unicode nastrojen?
Mozda je stvar u Indy komponentama? Jer rezultat je dobar i vide se čćžšđ, ali ocigledno kad indy to preuzme da nastane pakao :(
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Indy IdHTTP Unicode11.11.2010. u 17:21 - pre 163 meseci
> Huh :( a sta ako ne koristim te kontrole (za font nije problem), pa zar se nebi D2009 trebao brinuti o tome? Pa zar nije on unicode nastrojen?

Ako je D2009, onda bi trebalo isto raditi. Ja sam probao u D7 i Indy 10. Ako već radiš u D2009 onda ne vidim svrhu tvog primera sa konverzijom iz string u WideString.

> Mozda je stvar u Indy komponentama? Jer rezultat je dobar i vide se čćžšđ, ali ocigledno kad indy to preuzme da nastane pakao :(

Može da bude, proveri šta indy vraća, da li je to AnsiString ili je string, ako je string onda je to već unicode i ne treba da radiš nikakve dodele, ali proveri da li moraš negde navesti encoding. Takođe možeš zaboraviti na string već sve snimiti u neki stream i onda odatle učitati. Najbolje da koristiš TFileStream, i pogledaš šta si dobio, ako fajl nije vidljiv kada se otvori kao UTF8 onda ga Indy nije lepo preuzeo, ako je vidljiv onda je greška u kontrolama ili u tvojim konverzijama.


 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode11.11.2010. u 18:54 - pre 163 meseci
Ma lud sam - totalno lud. Ako netko ima kakav primjer neka mi posalje na mail ili postavi ovdje.
Jednostavno mi nece pa nece :(

Isprobao sam raznorazna cudesa, a znam da je u nekoj gluposti rijec.

Uspio sam ga dobiti kad ga provucem kroz ovu funkciju, ali misli da bi to i delphi sam trebao napraviti bez upotrebe dodatnih posebnih komponenti ili sta ti ja znam ... :(

Code:


function UTF8ToStrSmart(s: AnsiString): AnsiString;
var
  str: AnsiString;
  idx: Integer;
  hex: Byte;
  cln: Byte;
  buf: Pointer;
  len: Integer;
begin
  Result := '';
  cln := 0;
  if (s = '') then
    Exit;
  for idx := 1 to Length(s) do
  begin
    if (cln > 0) then
      begin
        str := str + s[idx];
        Dec(cln);
        if (cln = 0) then
          begin
            len := Length(str) + 4;
            GetMem(buf, len);
            ZeroMemory(buf, len);
            MultiByteToWideChar(CP_UTF8, 0, @str[1], len - 4, buf, len);
            Result := Result + WideCharToString(buf);
            FreeMem(buf, len);
          end;
      end
    else
      begin
        hex := Ord(s[idx]);
        if hex in [$00..$7F] then // Standart ASCII chars
          Result := Result + s[idx]
        else
          begin
            // Get lgth of UTF-8 char
            if hex and $FC = $FC then
              cln := 6
            else
            if hex and $F8 = $F8 then
              cln := 5
            else
            if hex and $F0 = $F0 then
              cln := 4
            else
            if hex and $E0 = $E0 then
              cln := 3
            else
            if hex and $C0 = $C0 then
              cln := 2
            else
              begin
                Result := Result + s[idx];
                Continue;
              end;
        Dec(cln);
        str := s[idx];
      end;
    end;
  end;
end; 

 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 06:13 - pre 163 meseci
Indy 10.2.3 (valjda, gde videti verziju?), Delphi 2009,tvoj kod ispod (bez konverzije u widestring)radi kako treba, sa ć
---
var
Url, Str : string;
begin
Url := 'http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|hr';
Str := IdHTTP1.Get(Url);
Edit1.Text := Str;
------

Edit1.text:={"responseData": {"translatedText":"domaće zadaće"}, "responseDetails": null, "responseStatus": 200}
Arduino Control Center
 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 07:06 - pre 163 meseci
Citat:
Indy 10.2.3 (valjda, gde videti verziju?),


Desni klik miša ne komponentu pa ti pokaže.

Ja probao to sa 10.5.7 i ne šljaka :(

Daj samo pogledaj koja ti je točna verzija pa javi.
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 09:46 - pre 163 meseci
@matobj: sad sam probao ovaj tvoj primer, ali tako što sam rezultat Get metode upisao direktno u TEdit.Text:
Code (delphi):
Edit1.Text := IdHTTP1.Get('http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|hr');

Ako ovo kod tebe ne radi, onda predpostavljam da imaš problem sa Windowsom, a ne sa Delphi ili sa Indy komponentama.

Reci nam koji Windows koristiš (i koji SP ako je XP) i šta ti je podešeno u Regional Settings u Control Panel-u?

EDIT: Zaboravih da kažem, ja imam Windows 7, Delphi 2010 i Indy v10.5.5.

[Ovu poruku je menjao rambo dana 12.11.2010. u 11:12 GMT+1]
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 11:26 - pre 163 meseci
XP SP3 i sve mi je na Croatian u regional settings.
Delphi 2009 i iNdy 10.5.7 i ne radi mi ni ovo??

Evo kolega probao isto Delphi 2009 i isti indy + Windows Vista i ne radi mu dobro.

Ovo u Delphi 2006 i indy 10.0.5 radi normalno, ali naravno u 2009 ne :(

Code:
Edit1.Text := UTF8Decode(IdHTTP1.Get('http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|hr'));



[Ovu poruku je menjao matobj dana 12.11.2010. u 13:09 GMT+1]
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 14:06 - pre 163 meseci
Verzija Indy 10.2.5.
Sve radi kako treba i na Windows7 i XP SP2 sa ovom verzijom Indy-ja.

[Ovu poruku je menjao lan-mi dana 12.11.2010. u 16:02 GMT+1]
Arduino Control Center
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 16:14 - pre 163 meseci
Windows 7 32 bit, regionalna podešavanja postavljena na Serbian (Latin), Delphi 2010 sa svim dopunama (4+5), Indy v10.5.5 koji dolazi uz Delphi. Kreirao sam novi projekat, stavio jedan TEdit i jedan TIdHTTP na formu. U OnCreate za formu sam stavio sledeći kod:
Code (delphi):
Edit1.Text := IdHTTP1.Get('http://ajax.googleapis.com/aja...amp;q=homework&langpair=en|sr');

U prilogu je slika koja pokazuje rezultat kada se program pokrene.

Neke stvari koje mi padaju na pamet kao mogući uzrok tvojih problema su da imaš Windows XP Home i da si eventualno u Regional Settings na trećoj kartici ostavio English (umesto da si takođe i tu stavio na Croatian). Ako ovo nije tačno, onda stvarno nemam ideju šta može da bude problem. Obzirom da se isti problem javlja i kod kolege sa Vistom, onda to zaista zbunjuje.


"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
Prikačeni fajlovi
 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 20:57 - pre 163 meseci
XP Professional - SP3 - Indy verzija 10.5.7 (ima li tko taj indy da proba) i Delphi 2009

Ne radi i hebi ga :(

Od svih ovih odgovora cini mi se da ta verzija Indy-a ne radi kako treba??? ili se varam. Svi odgovori ostaju otvoreni.

Mozda Delphi 2009 i ta verzija Indy-a ne rade to kako treba.

Ako netko ima XP + Delphi 2009 + Indy verzija 10.5.7 = neka proba i neka javi ili neka postavi projekt da probamo?

Stvarno mi je zao sto ovako moram daviti kolege, ali stvarno mi ta kombinacija ne radi :(

BTW: sve su kartice postavljene na Croatian tak da nije to.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Indy IdHTTP Unicode12.11.2010. u 21:48 - pre 163 meseci
> Od svih ovih odgovora cini mi se da ta verzija Indy-a ne radi kako treba??? ili se varam. Svi odgovori ostaju otvoreni.
> Mozda Delphi 2009 i ta verzija Indy-a ne rade to kako treba.

Snimi preuzetu stranu u fajl (TFileStream instanca koju proslediš Get metodi), onda taj fajl analiziraj i videćeš da li je do Indija.
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Indy IdHTTP Unicode14.11.2010. u 07:59 - pre 163 meseci
Ja sa D2009 imam source i za Indy9 i Indy10. Proveri u Library path da nije slucajno ubacena i putanja do Indy9 pa da kompajler brlja.
Arduino Control Center
 
Odgovor na temu

matobj

Član broj: 72323
Poruke: 73
*.adsl.net.t-com.hr.



Profil

icon Re: Indy IdHTTP Unicode14.11.2010. u 08:58 - pre 163 meseci
Citat:
Ja sa D2009 imam source i za Indy9 i Indy10. Proveri u Library path da nije slucajno ubacena i putanja do Indy9 pa da kompajler brlja.


Ma jok samo imam tu jednu verziju.
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: Indy IdHTTP Unicode14.11.2010. u 15:10 - pre 163 meseci
Ajde probaj još ovo.

Idi na ftp://indy.fulgan.com/ZIP/ i skini poslednji build (Indy10_4505.zip je trenutna verzija). Zatim iz Delphi ukloni sve tragove trenutne verzije i onda prati uputstva za instalaciju zadnje verzije.

Na tom linku je zvaničan FTP server gde je uvek poslednja stabilna verzija Indy, pa ako si kojim slučajem skinuo sa neke druge lokacije, postoji mala šansa da imaš lošu verziju.

U krajnjem slučaju, ako imaš negde slobodan računar, reinstaliraj sve od nule - Windows, Delphi i poslednju verziju Indy pa probaj opet. Nemoj instalirati dodatne komponente dok ne probaš na potpuno čistoj instalaciji. Ako ni tamo ne radi, onda jedino mogu da predpostavim da nešto radiš pogrešno ili da postoji neki problem vezan za tvoja podešavanja.

Na kraju, jedna glupa stvar - nadam se da nisi zaboravio da pre instalacije novog source-a ukloniš Indy koji dolazi uz Delphi?
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Indy IdHTTP Unicode

[ Pregleda: 3023 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.