نقل قول: مشکل با utf8 و ansi
خودِ IdHttp در دلفی 7 با رشته های ANSI کار میکنه، نه UTF-8؛ ولی داده ایی که به عنوان جواب از سرور دریافت می کنید، به صورت Stream ذخیره شده، پس محتواش هنوز دست نخورده هست، و اطلاعاتش از بین نرفته. وقتی این داده رو در یک String ذخیره می کنید، همه چیز باطل میشه! شما باید داده برگشتی در Stream رو به یک WideString اختصاص بدید.
نقل قول: مشکل با utf8 و ansi
نقل قول:
شما باید داده برگشتی در Stream رو به یک WideString اختصاص بدید
در حالتی که داده برگشتی رو به یه string یا widestring یا ansistring یا utf8string اختصاص میدم ، در شکل خروجی (با توجه به اینکه در دوحالت میبینمش قبل از تبدیل (با کمک ansitoutf8) و بعد از تبدیل )هیچ تغییری دیده نمیشه
نباید برای Idhttp هیچ تنظیمی انجام بشه؟
نقل قول: مشکل با utf8 و ansi
نقل قول:
در حالتی که داده برگشتی رو به یه string یا widestring یا ansistring یا utf8string اختصاص میدم ، در شکل خروجی (با توجه به اینکه در دوحالت میبینمش قبل از تبدیل (با کمک ansitoutf8) و بعد از تبدیل )هیچ تغییری دیده نمیشه
داده ایی که IdHttp از سایت گرفته خودش UTF-8 هست، دیگه استفاده از AnsiToUtf8 برای چیه؟! شما داده UTF-8 دارید، به یک نوع داده نیاز دارید که داده یونیکد رو براتون نگه داره، و یک کنترل که این داده یونیکد رو براتون نمایش بده. شاید بتونید Stream برگشتی رو مستقیما از طریق TntMemo.Lines.LoadFromStream در TntMemo لود کنید.
نقل قول: مشکل با utf8 و ansi
نقل قول:
داده ایی که IdHttp از سایت گرفته خودش UTF-8 هست
حق با شما بود
من برای داده دریافتی از widestring ، و در نهایت از utf8decode برای نمایش نهایی استفاده کردم که درست شد.
ممنون از راهنمایی شما
نقل قول: مشکل با utf8 و ansi
سلام
من متاسفانه عکس این مشکل رو دارم یعنی از دلفی میخوام پارامتر به سرور بفرستم،سمت سرورساید نوشته شده و سرور دو پارامتر ورودی رو میخونه و اونها رو در یک فایل تکست مینویسه
تا وقتی پارامتر انگلیسی هست همه چی درست کار میکنه ولی وقتی پارامتر فارسی میشه،به جای اونا روی فایل تکستی که سرور درست میکنه علامت سوال دیده میشه
کد من اینه
try
Stream := TIdMultiPartFormDataStream.Create;
pos:=TStringStream.Create;
stream.AddFormField('name', 'farsi name');
stream.AddFormField('family', 'farsi family');
try
try
try
http:=TIdHTTP.Create(self);
HTTP.HandleRedirects := True;
HTTP.AllowCookies := True;
with http do
begin
Request.ContentType := 'application/x-www-form-urlencoded;';
Request.CharSet := 'utf-8';
Request.AcceptCharSet := 'utf-8';
Request.UserAgent := 'agent2';
Request.Connection := 'Keep-Alive';
Request.ProxyConnection := 'Keep-Alive';
Request.CacheControl := 'no-cache';
HTTP.post('http://site.com/order/index.php',stream ,pos);
end;
except
on E: Exception do
ShowMessage('Error happend during POST: ' + E.Message);
end;
نقل قول: مشکل با utf8 و ansi
سلام
من برای استفاده از مترجم گوگل از همین روش استفاده کردم و برای فرستادن متن به سرور از UTF8ENCODE
موفق باشی
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
mossaferin
حق با شما بود
من برای داده دریافتی از widestring ، و در نهایت از utf8decode برای نمایش نهایی استفاده کردم که درست شد.
ممنون از راهنمایی شما
نخواستم 1پست جدید در تالار C ایجاد کنم این بود که همینجا پرسیدم.
میشه بگید این مشکل در C++ builder XE2 به چه صورت قابل حله؟
ویژگی های IdHTTP به صورت های زیر هم تنظیم کردم اما باز هم نشد!
AcceptCharset=UTF-8
Charset=UTF-8
WideString mRes;
mRes = myURL;
mRes = IdHTTP1->Get(mRes);
Panel1->Caption = mRes;
اما متن پنل همچنان به هم ریخته!!!!!
نقل قول: مشکل با utf8 و ansi
سلام
تا اونجایی که ذهنم یاری می کنه این یک باگ در یکی از ورژن های IntraWeb بود که بعداً رفع شد و با آپدیت کردن آن این مشکل حل می شود.
فکر می کنم که قبلاً هم در همین مورد در سایت توضیح داده بودم.
موفق باشید...
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
Object Pascal
سلام
تا اونجایی که ذهنم یاری می کنه این یک باگ در یکی از ورژن های IntraWeb بود که بعداً رفع شد و با آپدیت کردن آن این مشکل حل می شود.
فکر می کنم که قبلاً هم در همین مورد در سایت توضیح داده بودم.
موفق باشید...
یعنی XE2 هم هنوز کمه؟!! :(
نقل قول: مشکل با utf8 و ansi
نقل قول:
یعنی XE2 هم هنوز کمه؟!! :(
منظورم این نیست. XE2 ورژنی برای دلفی است. IntraWeb یک محصول جدا است که نسخه ابتدایی آن به طور پیش فرض در دلفی قرار داده شده است. IntraWeb XII (یعنی نسخه 12 مربوط به IntraWeb) در این زمینه باگی داشت که در نسخه 12.2.9 این مشکل حل شد. که برای کسب اطلاعات بیشتر می توانید به آدرس زیر مراجعه کنید:
http://www.atozed.com/intraweb/histo.../index.EN.aspx
در ضمن شما می توانید IntraWeb را Update کنید که روش انجام این کار در زیر شرح داده شده است:
http://stackoverflow.com/questions/8...-in-delphi-xe2
نقل قول: مشکل با utf8 و ansi
بحث رو IdHTTP هستش که یک کامپوننت indy ا
باز هم مسله به IntraWeb مربوط میشه؟
برنامه هم مربوط به ویندوزه برنامه تحت وب نیس
اینا رو گفتم که بهتر بتونین راهنمایی کنین
نقل قول: مشکل با utf8 و ansi
احتمال زیاد مشکل شما از هدر است.
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
mohsen24000
احتمال زیاد مشکل شما از هدر است.
میشه بیشتر توضیح بدید؟
نقل قول: مشکل با utf8 و ansi
نقل قول:
میشه بگید این مشکل در C++ builder XE2 به چه صورت قابل حله؟
باید ببینید Encoding داده دریافتی از سرور چی هست؟ Encoding در Header پاسخ HTTP برای شما ارسال میشه. اگر Encoding به صورت UTF8 بود، از Utf8String برای نگهداری از اون استفاده کنید. اگر یونیکد UTF16 بود، از string معمولی برای نگهداری اش استفاده کنید. اگر هم ANSI بود، اون وقت می تونید بر اساس CodePage ایی که براش مشخص شده، اون رو به UTF8 یا UTF16 تبدیل کنید و بعد نمایش اش بدید.
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
علی کشاورز
باید ببینید Encoding داده دریافتی از سرور چی هست؟ Encoding در Header پاسخ HTTP برای شما ارسال میشه. اگر Encoding به صورت UTF8 بود، از Utf8String برای نگهداری از اون استفاده کنید. اگر یونیکد UTF16 بود، از string معمولی برای نگهداری اش استفاده کنید. اگر هم ANSI بود، اون وقت می تونید بر اساس CodePage ایی که براش مشخص شده، اون رو به UTF8 یا UTF16 تبدیل کنید و بعد نمایش اش بدید.
خیلی ممنونم از توضیحاتتون،نوع داده های ارسالی سرور UTF-8 هست.اما Cpp B انگاری Utf8String نداره!خطا میگیره.میشه کمی بیشتر راهنمایی کنید؟
نقل قول: مشکل با utf8 و ansi
استاد شرمنده،اشکال از تایپ بنده بود وگرنه UTF8String هیچ مشکلی نداشت!!
فقط متاسفانه بازهم درست نشد
داده ها تو مزیلا و IE درست نمایش داده میشن اما تو برنامه به شکل خط قرون وسطی در میان
1 ضمیمه
نقل قول: مشکل با utf8 و ansi
ضمیمه 98264
این شکلی میشه!!!!
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
mossaferin
حق با شما بود
من برای داده دریافتی از widestring ، و در نهایت از utf8decode برای نمایش نهایی استفاده کردم که درست شد.
ممنون از راهنمایی شما
منم همین کارو کردم اما مشکل همچنان پا برجاست :(
نقل قول: مشکل با utf8 و ansi
به احتمال زیاد با خواندن این صفحه مشکلتان حل خواهد شد:
http://stackoverflow.com/questions/1...ng-into-string
نقل قول: مشکل با utf8 و ansi
حل نشد:گریه:
دیگه واااااقعا کلافه شدم :عصبانی++: هر کار می کنم نمیشه
بذار 1بار کامل بگم شاید...
من 1 IdHTTP دارم که با استفاده از تابع Get اون 1URL ارسال میکنم.سرور با گرفتن متغییرها و داده ها داخل URL پس از پردازش 1 رشته به عنوان جواب برمی گردونه که از نوع UTF-8 هست(اینو مطمئنم چون تابع سمت سرور هم خودم نوشتم و از اون گذشته وقتی URL رو در مرورگر میزنم همه چی درسته و Enc..=UTF-8 نشون میده)
اما مقدار برگشتی در برنامه بهم ریخته نشون داده میشه :گیج:
object IdHTTP1: TIdHTTP
AllowCookies = True
ProxyParams.BasicAuthentication = False
ProxyParams.ProxyPort = 0
Request.CharSet = 'UTF-8'
Request.ContentEncoding = 'UTF-8'
Request.ContentLength = -1
Request.ContentRangeEnd = -1
Request.ContentRangeStart = -1
Request.ContentRangeInstanceLength = -1
Request.Accept = 'text/html, */*'
Request.AcceptCharSet = 'UTF-8'
Request.BasicAuthentication = False
Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
Request.Ranges.Units = 'bytes'
Request.Ranges = <>
HTTPOptions = [hoForceEncodeParams]
Left = 40
Top = 112
end
UTF8String mRes;
mRes = IdHTTP1->Get(mURL);
Memo1->Text = mRes;
برنامه در Borland C++ BuilderXE2
OS : WIN.7
نقل قول: مشکل با utf8 و ansi
همین کدت رو با یه آدرس دیگه چک کن ببین باز هم همین مشکل وجود داره!
نقل قول: مشکل با utf8 و ansi
نقل قول:
نوشته شده توسط
mohsen24000
همین کدت رو با یه آدرس دیگه چک کن ببین باز هم همین مشکل وجود داره!
تست کردم اما باز هم نشد
روی 2 سرور جداگانه هم تست کردم
نقل قول: مشکل با utf8 و ansi
و اما جواب نهایی(البته در دلفی و نسخه های جدیدتر از 2009): :لبخند:
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
sm: TStream;
begin
sm := TMemoryStream.Create;
try
IdHTTP1.Get('http://www.YYY.com/Index.php', sm);
sm.Position := 0;
Memo1.Lines.LoadFromstream(sm, TEncoding.UTF8)
finally
sm.Free;
end;
end;
نقل قول: مشکل با utf8 و ansi
مشکل حل شد بالاخره :خجالت:
اول از همه جا داره از استاد عزیز آقای کشاورز بابت راهنماییشون تشکر کنم و از دوست محترم آقای عشایری که حکم استاد بنده رو دارن نیز بابت زحمات و وقتی که در اختیار بنده گذاشتن نهایت قدردانی انجام بدم
اینم راه حل ساده اما راه خیلی که خیلی وقتم روگرفت
درواقع معادل سازی جواب آقای عشایری در C++ Builder هستش
TMemoryStream *tmem=new TMemoryStream();
TEncoding *mte;
__try{
IdHTTP1->Get("YOUR URL",tmem);
tmem->Position = 0;
Memo1->Lines->LoadFromStream(tmem ,mte->UTF8);
}
__finally{
delete tmem;
}