ورود

View Full Version : مشکل IdHTTP با دریافت اطلاعات یونیکد



صابر طهماسبی
جمعه 05 شهریور 1389, 17:47 عصر
سلام
من با IdHTTP اطلاعاتی را به یک صفحه ارسال می کنم و می خواهم پاسخ را به در یک memo نمایش بدم اما کاراکتر های فارسی در memo به صورت „ÛŒ,تری دی مکس,نرم نمایش داده میشه!
این هم کد برنامه هست لطفا راهنمایی کنید :





unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdGlobalProtocols, IdMultipartFormData, IdHTTP;

type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
stm: TIdMultiPartFormDataStream;

begin
stm:=TIdMultiPartFormDataStream.Create;
stm.AddFormField('productid','184');

memo1.Text:=idhttp1.Post('http://localhost/test.php',stm);
stm.Free;

end;

end.

vcldeveloper
جمعه 05 شهریور 1389, 18:31 عصر
چه نسخه ایی از دلفی؟

صابر طهماسبی
جمعه 05 شهریور 1389, 19:47 عصر
چه نسخه ایی از دلفی؟
دلفی 2010
این هم عرض کنم که اطلاعات از php به صورت utf-8 ارسال میشه و اون مشکلی نداره

vcldeveloper
شنبه 06 شهریور 1389, 02:05 صبح
stringها در دلفی 2010 به صورت UTF-16 LE ذخیره میشند. داده دریافتی از نرم افزار PHP خودتان را که به صورت UTF-8 هست، در یک متغیر از نوع Utf8string بریزید، و سپس آن را با استفاده از تابع UTF8ToString به string دلفی تبدیل کنید و به Memo مربوطه اختصاص بدید.

صابر طهماسبی
شنبه 06 شهریور 1389, 08:14 صبح
stringها در دلفی 2010 به صورت UTF-16 LE ذخیره میشند. داده دریافتی از نرم افزار PHP خودتان را که به صورت UTF-8 هست، در یک متغیر از نوع Utf8string بریزید، و سپس آن را با استفاده از تابع UTF8ToString به string دلفی تبدیل کنید و به Memo مربوطه اختصاص بدید.
ممنونم آقای کشاورز
اما مشکل همچنان باقی است:ناراحت:

mossaferin
شنبه 06 شهریور 1389, 15:47 عصر
من هم مشکل شما رو داشتم ...

http://barnamenevis.org/forum/showthread.php?t=222763

موفق باشی

صابر طهماسبی
شنبه 06 شهریور 1389, 19:47 عصر
از راهنمایی همگی کمال تشکر را دارم نکات جالبی یاد گرفتم
اما مشکل در دلفی 2010 همچنان باقیست:ناراحت:
پروژه رو ضمیمه کردم لطفا کمک کنید.

vcldeveloper
یک شنبه 07 شهریور 1389, 04:37 صبح
پروژه رو ضمیمه کردم لطفا کمک کنید.


procedure TForm1.Button1Click(Sender: TObject);
var
stm: TIdMultiPartFormDataStream;
Response : TStringStream;
begin
Response := TStringStream.Create('',TEncoding.UTF8);
try
stm:=TIdMultiPartFormDataStream.Create;
try
stm.AddFormField('info','hello');
IdHTTP1.Post('http://www.artistnew.com/',stm,Response);
memo1.Lines.Text := Response.DataString;
finally
stm.Free;
end;
finally
Response.Free;
end;
end;

mossaferin
یک شنبه 07 شهریور 1389, 18:22 عصر
و یا



memo1.Lines.Text := utf8decode(Response.DataString);

vcldeveloper
یک شنبه 07 شهریور 1389, 19:01 عصر
و یا

کد:
memo1.Lines.Text := utf8decode(Response.DataString);

برای اون کد دیگه نیازی به نوشتن Utf8Decode نیست.

صابر طهماسبی
یک شنبه 07 شهریور 1389, 21:34 عصر
از همگی متشکرم
با کد آقای کشاورز حل شد.

mossaferin
دوشنبه 08 شهریور 1389, 09:33 صبح
برای اون کد دیگه نیازی به نوشتن Utf8Decode نیست.

درسته ، این کد کارش رو بدون اون تغییراتی که شما نوشتید ،انجام میده یعنی با همان کد اولیه (البته در نسخه های پایین تر دلفی هم کار میکنه )

ممنون