[idhttp.post] Kodowanie znaków

0

Witam,

mam mniej więcej taki kod (wybebeszyłem z funkcji najważniejsze linijki):

 var
  mpfSource: TIdMultiPartFormDataStream;
  odbior: tstringstream;
  idHTTP1: tidhttp;
begin
  idHTTP1 := tidhttp.create;
  idHTTP1.ReadTimeout := 25000;
  idHTTP1.ConnectTimeout := 5000;
  odbior := tstringstream.create;
  mpfSource := TIdMultiPartFormDataStream.create;
  try
    idHTTP1.Request.ContentType := mpfSource.RequestContentType;
    mpfSource.AddFormField('cos', 'łódź');
    mpfSource.AddFormField('cos2', 'robić łaskę');

   idHTTP1.Post(url, mpfSource, odbior);

Mój problem polega na tym, że do serwera docierają zmienne post bez polskich znaków, usuwa ogonki (np. zamiast "ł" jest 'l', "ą"="a" itp.) "Krzaki" się nie generują, tylko usuwa ogonki.

Po stronie serwera wszystko OK. Serwer obsługuje UTF8, jak ustawić to kodowanie podczas wysyłania post?

pozdrawiam

chciałbym jeszcze uprzedzić iż:

IdHTTP1.Request.ContentEncoding := 'UTF-8'; 

nie pomaga

Przepraszam, że tak wysyłam post pod postem, ale nie mam możliwości edycji.

Chciałbym dodać jeszcze jedną istotną rzecz, korzystam z D2010

0

Przepraszam, że tak wysyłam post pod postem, ale nie mam możliwości edycji.

To teraz już wiesz po co są konta? No to załóż.

I czy próbowałeś rzeczy w stylu AnsiToUtf8?

I jaką masz wersję Indy (bo z tego korzystasz).

EDIT: Jest jeszcze http://4programmers.net/Delphi/FAQ/IdHttp_-_brak_polskich_znaków

0
payl napisał(a)

I czy próbowałeś rzeczy w stylu AnsiToUtf8?

Z tego co wiem to w D2010 wszystkie stringi są przechowywane w utf8 - AnsiToUtf8 nie pomaga.

payl napisał(a)

I jaką masz wersję Indy (bo z tego korzystasz).

Indy10

payl napisał(a)

EDIT: Jest jeszcze http://4programmers.net/Delphi/FAQ/IdHttp_-_brak_polskich_znaków

</quote>

Również nie pomaga...

0

nie pomaga

To może spróbuj Synapse, bo z tego co wiem jest tutaj paru speców od tego... Z indy osobiście przynajmniej nie korzystam...

0

Synapse odpada.

Znalazłem identyczny problem:
http://stackoverflow.com/questions/6750222/delphi-indy-send-post-data-in-cyrillic

Coś takiego pomaga:

     mpfSource.AddFormField('cos', 'łódźą', 'utf-8');

lecz wtedy do serwera trafia następujący ciąg:
'=C5=82=C3=B3d=C5=BA'

Oczywiście mogę zdekodować go po stronie PHP funkcją "quoted_printable_decode", ale chciałbym wysyłać zmienne Od razu w stałym kodowaniu 8bit.

W podanym linku gość ustawia stałe kodowanie ".ContentTransfer := '8bit';
Ale chyba pisał to z pamięci bo w ogóle takiego property nie ma...

Jakieś pomysły?

0

A mogę wiedzieć dlaczego odrzucasz możliwość użycia Synapse i chcesz zamiast niego nierozwijane już Indy? Fakt, pod wersjami Delphi nowszymi niż 2009 jest tam też problem ze stringami, ale w wiki na stronie projektu jest opisane co należy zrobić aby wszystko było ok. Niewielę mogę pomóc z Delphi 2009, bo sam wolę używać wersji 7, która mi w zupełności wystarcza. Pamiętam jednak, że nieraz ktoś zgłaszał problemy z metodą POST w Indy, a kiedy swój kod zaadoptował pod Synapse - problem na ogół znikał, więc może warto chociaż spróbować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1