نمایش نتایج 1 تا 25 از 25

نام تاپیک: مشکل با utf8 و ansi

  1. #1

    Question مشکل با utf8 و ansi

    سلام

    من با استفاده از Tidhttp از یه سایت اطلاعاتی رو میگیرم ، که توش اطلاعات به صورت فارسی وجود داره و توی وب برازر با انکدینگ utf8 همه چیز درسته

    وقتی اطلاعات رو با Tidhttp دریافت میکنم و توی یه ممو نشان میدم اطلاعات به هم ریخته است

    از utf8string برای ذخیره فیلد مربوطه استفاده کردم ، نشد
    از تابع ANSITOUTF8 برای تبدیل استفاده کردم ، تغییر کرد ولی فارسی نشد
    اطلاعات رو توی TNTMEMO ریختم ، باز هم نشد
    این رو هم بگم که تنظیمات ویندوزم فارسیه و دلفی 7
    فونتش رو هم tahoma گذاشتم ( البته چیزهای دیگه رو هم امتحان کردم)

    1- چکار باید انجام بدم ؟
    2- توی Tidhttp جایی وجود داره که character encoding رو روی utf8 تنظیم کرد ؟

    ممنون از راهنمایی دوستان

  2. #2

    نقل قول: مشکل با utf8 و ansi

    خودِ IdHttp در دلفی 7 با رشته های ANSI کار میکنه، نه UTF-8؛ ولی داده ایی که به عنوان جواب از سرور دریافت می کنید، به صورت Stream ذخیره شده، پس محتواش هنوز دست نخورده هست، و اطلاعاتش از بین نرفته. وقتی این داده رو در یک String ذخیره می کنید، همه چیز باطل میشه! شما باید داده برگشتی در Stream رو به یک WideString اختصاص بدید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3

    نقل قول: مشکل با utf8 و ansi

    شما باید داده برگشتی در Stream رو به یک WideString اختصاص بدید
    در حالتی که داده برگشتی رو به یه string یا widestring یا ansistring یا utf8string اختصاص میدم ، در شکل خروجی (با توجه به اینکه در دوحالت میبینمش قبل از تبدیل (با کمک ansitoutf8) و بعد از تبدیل )هیچ تغییری دیده نمیشه

    نباید برای Idhttp هیچ تنظیمی انجام بشه؟

  4. #4

    نقل قول: مشکل با utf8 و ansi

    در حالتی که داده برگشتی رو به یه string یا widestring یا ansistring یا utf8string اختصاص میدم ، در شکل خروجی (با توجه به اینکه در دوحالت میبینمش قبل از تبدیل (با کمک ansitoutf8) و بعد از تبدیل )هیچ تغییری دیده نمیشه
    داده ایی که IdHttp از سایت گرفته خودش UTF-8 هست، دیگه استفاده از AnsiToUtf8 برای چیه؟! شما داده UTF-8 دارید، به یک نوع داده نیاز دارید که داده یونیکد رو براتون نگه داره، و یک کنترل که این داده یونیکد رو براتون نمایش بده. شاید بتونید Stream برگشتی رو مستقیما از طریق TntMemo.Lines.LoadFromStream در TntMemo لود کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5

    نقل قول: مشکل با utf8 و ansi

    داده ایی که IdHttp از سایت گرفته خودش UTF-8 هست
    حق با شما بود
    من برای داده دریافتی از widestring ، و در نهایت از utf8decode برای نمایش نهایی استفاده کردم که درست شد.

    ممنون از راهنمایی شما

  6. #6

    نقل قول: مشکل با 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;

  7. #7

    نقل قول: مشکل با utf8 و ansi

    سلام

    من برای استفاده از مترجم گوگل از همین روش استفاده کردم و برای فرستادن متن به سرور از UTF8ENCODE

    موفق باشی

  8. #8
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با 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;

    اما متن پنل همچنان به هم ریخته!!!!!

  9. #9

    نقل قول: مشکل با utf8 و ansi

    سلام
    تا اونجایی که ذهنم یاری می کنه این یک باگ در یکی از ورژن های IntraWeb بود که بعداً رفع شد و با آپدیت کردن آن این مشکل حل می شود.
    فکر می کنم که قبلاً هم در همین مورد در سایت توضیح داده بودم.
    موفق باشید...

  10. #10
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    نقل قول نوشته شده توسط Object Pascal مشاهده تاپیک
    سلام
    تا اونجایی که ذهنم یاری می کنه این یک باگ در یکی از ورژن های IntraWeb بود که بعداً رفع شد و با آپدیت کردن آن این مشکل حل می شود.
    فکر می کنم که قبلاً هم در همین مورد در سایت توضیح داده بودم.
    موفق باشید...
    یعنی XE2 هم هنوز کمه؟!! :(

  11. #11

    نقل قول: مشکل با 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

  12. #12
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    بحث رو IdHTTP هستش که یک کامپوننت indy ا
    باز هم مسله به IntraWeb مربوط میشه؟
    برنامه هم مربوط به ویندوزه برنامه تحت وب نیس
    اینا رو گفتم که بهتر بتونین راهنمایی کنین

  13. #13
    کاربر دائمی آواتار mohsen24000
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    شهر مقدس قم
    پست
    583

    نقل قول: مشکل با utf8 و ansi

    احتمال زیاد مشکل شما از هدر است.

  14. #14
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    نقل قول نوشته شده توسط mohsen24000 مشاهده تاپیک
    احتمال زیاد مشکل شما از هدر است.
    میشه بیشتر توضیح بدید؟

  15. #15

    نقل قول: مشکل با utf8 و ansi

    میشه بگید این مشکل در C++‎‎ builder XE2 به چه صورت قابل حله؟
    باید ببینید Encoding داده دریافتی از سرور چی هست؟ Encoding در Header پاسخ HTTP برای شما ارسال میشه. اگر Encoding به صورت UTF8 بود، از Utf8String برای نگهداری از اون استفاده کنید. اگر یونیکد UTF16 بود، از string معمولی برای نگهداری اش استفاده کنید. اگر هم ANSI بود، اون وقت می تونید بر اساس CodePage ایی که براش مشخص شده، اون رو به UTF8 یا UTF16 تبدیل کنید و بعد نمایش اش بدید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  16. #16
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    باید ببینید Encoding داده دریافتی از سرور چی هست؟ Encoding در Header پاسخ HTTP برای شما ارسال میشه. اگر Encoding به صورت UTF8 بود، از Utf8String برای نگهداری از اون استفاده کنید. اگر یونیکد UTF16 بود، از string معمولی برای نگهداری اش استفاده کنید. اگر هم ANSI بود، اون وقت می تونید بر اساس CodePage ایی که براش مشخص شده، اون رو به UTF8 یا UTF16 تبدیل کنید و بعد نمایش اش بدید.
    خیلی ممنونم از توضیحاتتون،نوع داده های ارسالی سرور UTF-8 هست.اما Cpp B انگاری Utf8String نداره!خطا میگیره.میشه کمی بیشتر راهنمایی کنید؟

  17. #17
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    استاد شرمنده،اشکال از تایپ بنده بود وگرنه UTF8String هیچ مشکلی نداشت!!
    فقط متاسفانه بازهم درست نشد
    داده ها تو مزیلا و IE درست نمایش داده میشن اما تو برنامه به شکل خط قرون وسطی در میان

  18. #18
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    Untitled.png
    این شکلی میشه!!!!

  19. #19
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    نقل قول نوشته شده توسط mossaferin مشاهده تاپیک
    حق با شما بود
    من برای داده دریافتی از widestring ، و در نهایت از utf8decode برای نمایش نهایی استفاده کردم که درست شد.

    ممنون از راهنمایی شما
    منم همین کارو کردم اما مشکل همچنان پا برجاست :(

  20. #20

    نقل قول: مشکل با utf8 و ansi

    به احتمال زیاد با خواندن این صفحه مشکلتان حل خواهد شد:
    http://stackoverflow.com/questions/1...ng-into-string

  21. #21
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با 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

  22. #22
    کاربر دائمی آواتار mohsen24000
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    شهر مقدس قم
    پست
    583

    نقل قول: مشکل با utf8 و ansi

    همین کدت رو با یه آدرس دیگه چک کن ببین باز هم همین مشکل وجود داره!

  23. #23
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با utf8 و ansi

    نقل قول نوشته شده توسط mohsen24000 مشاهده تاپیک
    همین کدت رو با یه آدرس دیگه چک کن ببین باز هم همین مشکل وجود داره!
    تست کردم اما باز هم نشد
    روی 2 سرور جداگانه هم تست کردم

  24. #24

    نقل قول: مشکل با 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;
    آخرین ویرایش به وسیله BORHAN TEC : شنبه 23 دی 1391 در 18:20 عصر

  25. #25
    کاربر دائمی آواتار Borland.C
    تاریخ عضویت
    مهر 1390
    محل زندگی
    مشهد
    پست
    131

    نقل قول: مشکل با 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;
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •