PDA

View Full Version : سوال: مشکل با ذخیره متن در memo



joooje
پنج شنبه 06 بهمن 1390, 19:04 عصر
سلام به دوستان
من قبلا تو دلفی 7 یه تکست رو با memo ذخیره میکردم و مشکلی نبود
تکست رو از ترکیب یه سری Char اعداد به دست میارم
الان من همون متن رو تو دلفی 2010 میخوام ذخیره کنم مشکل دارم
تصویر رو گذاشتم
متن رو توی برنامه مثل خط دوم تصویر نمایش میده
ولی زمانی که ذخیره میشه مانند خط اول ذخیره شده
آیا مشکل مربوط به پشتیبانی یونیکد هست که تو دلفی 7 نبوده؟
و من الان چطوری میتونم متن رو مثل قبل و بدون این اشکال فعلی ذخیره کنم؟
81513

Mask
پنج شنبه 06 بهمن 1390, 19:31 عصر
آیا از تابع اینکرپت استفاده میکنید؟

joooje
پنج شنبه 06 بهمن 1390, 19:46 عصر
سلام
ممنون
خیر من با این تابع آشنایی ندارم
میشه در مورد استفاده از اون توضیح بدید
ممنون

Mask
پنج شنبه 06 بهمن 1390, 20:04 عصر
دوست عزیز .کدهاتون رو اینجا بزارید تا بشه تشخیص داد عیب از کجاست.

joooje
پنج شنبه 06 بهمن 1390, 21:24 عصر
var
text1,text2,text5,text4:String;
t1:string;
charcod1,x,z:integer;
t2:array[1..1000] of string;
begin
text2:='125-125-254-123-59-215-124-124-145-26-27-84-45-68-98-74-148';
t1:=text2;
z:=1;
for x:=1 to Length(t1) do
begin
if t1[x]='-' then
begin
z:=z+1;
end
else
t2[z]:=t2[z]+t1[x];
end;
for x:=1 to Length(text1) do
begin
charcod1:=strtoint(t2[x]);
if charcod1 > 255 then
begin
charcod1:=charcod1-255;
end;
text5:=text5+Char(charcod1);
end;
memo2.Text:=text5;
memo2.Lines.SaveToFile('C:\Users\Desktop\s.txt');
end;

این کدی هست که استفاده کردم
این کد تو دلفی 7 درست کار میده
ولی تو 2010 درست تو فایل ذخیره نمیکنه
البته اون اعداد کد اسکی هستند که قابل تغییر هستند هر دفعه و یکسان نیستند

joooje
جمعه 07 بهمن 1390, 16:46 عصر
من حتی برای ذخیره در فایل بیخیال memo هم شدم و با ساخت StringList تلاش برای نوشتن در فایل کردم که باز هم همون مشکل رو دارم
نمی دونم چرا یک سری از کارکتر ها رو به صورت ? ذخیره میکنه:گریه:
ممنون میشم راهنمایی کنید



with
TStringList.Create do
try
Text:= text5+chr(250)+chr(251)+chr(252)+chr(170)+chr(80);
SaveToFile('C:\Users\Desktop\E.cat');
finally
Free;
end;

عقاب سیاه
جمعه 07 بهمن 1390, 16:52 عصر
به نظرم بخاطر همون انکریپتیه که ذخیره میشه!
مثلا حالت ذخیره پیش فرض ANSI است که یکسری از کارکتر های شما را پشتیبانی نمی کنه
حالا اگه شما بتونین با یه انکریپته دیگه ای ذخیره کنین که از اون کارکتر ها پشتیبانی کنه مشکلتون حل شه

joooje
جمعه 07 بهمن 1390, 17:23 عصر
ممنون
آخه اون کارکتر ها ثابت نیستن و تو هر بار اجرا ممکنه باز هم یکی از کارکتر های بین 0 تا 255 در حین دیکریپت و اینکریپت تولید بشه و بار هم مشکل ایجاد کنه
بله به احتمال 100% مشکل ماله این پیش فرض Ansi هست که باید به unicode تبدیل بشه!
آیا تو دلفی 2010 جایی وجود نداره که بشه در مورد پشتیبانی برنامه از Ansi یا unicode یا UTF-8 تغییرات ایجاد کرد؟
بدجوری کارمو لنگ کرده:ناراحت:
جستجو هم که میکنم تو سایت این مشکل در زبانهای دیگه توضیح داده شده ولی تو دلفی چیزی پیدا نکردم:گریه:

عقاب سیاه
جمعه 07 بهمن 1390, 17:31 عصر
من این را تو گوگل پیدا کردم
باید تست بشن ولی:

http://blog.ediot.net/2011/03/delphi-unicode-string-encryption.html

joooje
جمعه 07 بهمن 1390, 18:03 عصر
من حتی از تابع AnsiToUtf8 هم استفاده کردم و string هام رو همه رو به UTF8String تبدیل کردم:متفکر:
ولی باز هم نشد
کممممممممک :ناراحت:

mohsen24000
جمعه 07 بهمن 1390, 18:34 عصر
بهتره خودت یه مبدل بنویسی که به ازای کدهای اسکی انسی بیاد معادل یونیکدش رو استفاده بکنه...

کد اسکی حروف و اعداد حروف و اعداد فارسی (به یونیکد)
#1570& آ 1575#& ا 1576#& ب #1662 & پ #1578 & ت #1579 & ث #1580 & ج #1670 & چ #1581 & ح #1582 & خ #1583 & د #1584 & ذ #1585 & ر #1586 & ز #1688 & ژ #1587 & س #1588 & ش #1589 & ص #1590 & ض #1591 & ط #1592 & ظ #1593 & ع #1594 & غ #1601 & ف #1602 & ق #1705 & ک #1711 & گ #1604 & ل #1605 & م #1606 & ن #1608 & و #1607 & ه #1740 & ی #1574 & ئ ٠ &#1632 ١ #1633 ٢ &#1634 ٣ &#1635 ٤ &#1636 ٥ &#1637 ٦ &#1638 ٧ &#1639 ٨ &#1640 ٩ &#1641

یوسف زالی
جمعه 07 بهمن 1390, 20:04 عصر
سلام. اگر کاراکتر هاتون فارسی هستند قبل هرکدوم این رو بگذارید:
chr(6) + chr(X) // delphi

برای انگلیش هم 0
تست کنید بلکه فرجی شد.

البته اگر نشد این را هم تست کنید:
chr(255) + chr(254) + YourStringWithChar6

اگر اشتباه نکنم، یا شاید اول 254 باشه.
فرمت استاندارد یونیکد در فایل تکسته.

تجلی
شنبه 08 بهمن 1390, 17:31 عصر
فکر میکنم شما اگر سورس کامل برنامتون رو میزاشتید تا حالا مشکلتون حل شده بود . به هر حال یه مطلبی رو خدمتتون عرض کنم شاید برای کار شما راهگشا باشه این موضوعیه که منو 2 هفته سر کار گذاشت !!! و به احتمال 99 درصد مشکل شما رو هم حل میکنه .

شما اگر یه متنی رو با base64 اینکود کنید و مجدد بخواید همین متن رو دیکود کنید به جای متن فارسی با علامت سوال مواجه میشید ! . مگر اینکه local language رو روی persian گذاشته باشید . به هیچ طریقی دیگه این متن بر نمیگرده حتی با همون ansi به utf8 یا هر چیز دیگه ای چون این کاراکتر دیگه از بین میره . هر جا سوال میکردم هم جوابی نمیگرفتم تا اینکه تو سایت stack over پرسیدم و راه حل مشکل رو پیدا کردم ( استفاده از TEncoding.UTF8 یا IndyUTF8Encoding() یا IndyUTF8Encoding() در حین تبدیل >

لینک سوال به همراه پاسخش >
http://stackoverflow.com/questions/8984247/making-a-base64-decoded-text-visible-without-changing-windows-language-for-non
کسی که جواب داده هم یکی از خبرهای دلفی و ایندی هستش .

شما اگر از چیزی شبیه به مثلا >

memo1.lines.savetofile(file name , encoding)

استفاده کنید دیگه در حین عملیات سیو کردن چه به حافظه و چه به فایل روی سیستم کارکترتون گم نمیشه .
همین دیروز یه فایلی رو میخواستم در حافظه سیو کنم که کاراکترهاش گم میشد که با روش بالا مشکل حل شد .
موفق باشید .