View Full Version : ذخیره کردن متن درون Memo به صورت ANSI
ali_mohamadi8928
شنبه 24 آذر 1386, 01:24 صبح
با سلام .
من وقتی متنهای درون Memo رو با فرمان زیر ذخیره میکنم با یونیکد UTF - 8 ذخیره میشه که من باهاش شدیدا مشکل دارم .
Memo1.Lines.SaveToFile('C:\test.txt');
من میخوام متنهام با یونیکد ANSI ذخیره بشه !!!!
خیلی بهش نیاز دارم لطفا راهنماییم کنید . :ناراحت:
با تشکر .
vcldeveloper
شنبه 24 آذر 1386, 01:39 صبح
من وقتی متنهای درون Memo رو با فرمان زیر ذخیره میکنم با یونیکد UTF - 8 ذخیره میشه که من باهاش شدیدا مشکل دارم .
VCL از Unicode پشتیبانی نمی کنه. TMemo هم متن را بصورت ANSI ذخیره میکنه و اصلا امکان ذخیره متن به صورت Unicode رو نداره.
ali_mohamadi8928
شنبه 24 آذر 1386, 01:41 صبح
پس چرا روی سیستم من اون رو به صورت UTF - 8 ذخیره میکنتش ؟
ali_mohamadi8928
شنبه 24 آذر 1386, 01:45 صبح
اصلا کدی یا کامپاننتی هست که UTF - 8 رو به ANSI تبدیل بکنه ؟
خیلی نیاز دارم بهش . کارم گیر همین هست اخه توی فایل متنیم نوشته ی فارسی هم هست ولی چون UTF - 8 هست وقتی میریزمش توی StringGrid کلمات نامعلوم هستش ولی وقتی ANSI باشه این مشکل اصلا پیش نمیاد .
خیلی گیرشم لطفا کمک کنید .
Cave_Man
شنبه 24 آذر 1386, 01:50 صبح
اصلا بصورت یونیکد که شما میگی ذخیره نمیشه
اصلا شما از کجا تشخیص میدی که فایل متنی ایجاد شده چه فرمتی داره؟ انسی یا یونیکد؟
ali_mohamadi8928
شنبه 24 آذر 1386, 02:04 صبح
فایل متنی رو با Notepad وقتی باز میکنی از منوی File گزینه ی Save as رو که بزنی یک پنجره باز میشه که پایینش در قسمت EnCoding فرمت فایل متنی جاری نوشته شده که میشه دستی تغییرش داد و ذخیرش کرد دوباره .
برای من فایلهای ذخیره شده با یونیکد UTF - 8 هستن .
ایا کامپاننت یا کدی برای تغییر یونیکد وجود داره ؟؟؟؟؟؟؟؟؟؟
ali_mohamadi8928
شنبه 24 آذر 1386, 02:14 صبح
اهان یه چیزی فهمیدم .
اخه من میومدم با استفاده از IdHTTP1 سورس صفحه یک وب سایت رو میگرفتم و میریختم توی یک Memo و بعد ذخیرش میکردم . با کدهای زیر .
Memo1.Lines.Text:=IdHTTP1.Get('http://barnamenevis.org/forum/index.php');
Memo1.Lines.SaveToFile('c:\htm.txt');
در این صورت یونیکد فایل متنی دخیره شده UTF - 8 میشه ولی اگه همینجوری بخوام یک متن رو ذخیره کنم از Memo با ANSI ذخیره میشه . مثلا با کد زیر .
Memo1.Lines.Add('Test 11111') ;
Memo1.Lines.SaveToFile('c:\htm.txt');
حالا باید چیکار کنم که وقتی سورس سایت هم میگیرم میریزم توی Memo و ذخیره میکنم یونیکدش همون ANSI باشه و UTF - 8 نشه ؟؟؟؟؟
ali_mohamadi8928
شنبه 24 آذر 1386, 02:24 صبح
دوستان عزیز ممنون .
خودم مشکل رو حل کردم . ( درست شد ) با تشکر .
vcldeveloper
شنبه 24 آذر 1386, 11:05 صبح
شما مشکلت حل شد، ولی برای اینکه دیگران اشتباه متوجه نشوند:
حالا باید چیکار کنم که وقتی سورس سایت هم میگیرم میریزم توی Memo و ذخیره میکنم یونیکدش همون ANSI باشه و UTF - 8 نشه
وقتی سورس سایت را با IdHttp می گیرید، این متن بصورت یونیکد هست. در یونیکد هر کارکتر 2 بایت اشغال میکنه. وقتی این متن را می ریزید در Memo، از حالت یونیکد خارج میشه، چون Memo با string کار میکنه (نه WideString)، که در آن هر کارکتر یک بایت اشغال میکنه. نتیجه این میشه که با ریختن متن در یک Memo، بایت دوم هر کارکتر از بین میره و در هنگام ذخیره کردن متن آن Memo، متن بصورت ANSI ذخیره میشه.
پس تصور نکنید که چون IdHttp داده ها را بصورت یونیکد بر می گرداند، اگر آنها را در Memo بریزیم، به همان شکل یونیکد ذخیره می شود.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.