PDA

View Full Version : یک مشکل در گرفتن کد اسکی در دلفی2009



homayoon_fara
جمعه 13 شهریور 1388, 17:56 عصر
سلام به همه دوستان

من به یک مشکل ناجور تو دلفی 2009 بر خوردم که نمی دونم ایراد از کجاست و راه حلش چیه.

مشکل من اینه که وقتی تو دلفی 2009 با استفاده از تابع ( )Ord کد اسکیه یک حرف فارسی رو برمیگردونم ، یک عدد 4 رقمی عجیب برمیگردونه اما همین تابع تو دلفی 7 یک عدد 3 رقمی برمیگردونه که این 2 تا هیچ شباهتی هم به هم ندارن.

مثلا حرف "ش" در ------ delphi 7 --------> میشه 212

اما

حرف "ش" در ----- delphi 2009 -----> میشه 1588

نمونه برنامه هارو براتون پیوست کردم. یکیش دلفی 7 هست و دیگری دلفی 2009. دوستان خواهشا اگر میدونن مشکل از چیه و راه حلش چیه راهنمایی کنن.
با تشکر.

متن برنامه هم اینه:



procedure TForm1.Button1Click(Sender: TObject);
begin

Edit2.Text:=inttostr(ord(Edit1.Text[1]));

end;

vcldeveloper
جمعه 13 شهریور 1388, 18:21 عصر
این مشکل نیست! دلفی 2009 یونیکد هست، دلفی 7 از یونیکد پشتیبانی نمیکنه.
توی دلفی 2009 کد یونیکد حرف ش به شما داده میشه. این کد در تمام دنیا منحصر به فرد هست.
توی دلفی 7 کد اسکی مربوط به کارکتر ش در CodePage فعال سیستم برگشت داده میشه، یعنی کارکتر ش در CodePage جاری روی کد 212 اسکی قرار داده شده. با تغییر CodePage، کارکتری که توسط کد 212 اسکی برگشت داده میشه، متفاوت خواهد بود.

vcldeveloper
جمعه 13 شهریور 1388, 18:29 عصر
اگر میخواید حتما کد اسکی دریافت کنید، باید متن یونیکد را به اسکی تبدیل کنید:


var
S : AnsiString;
begin
S := AnsiString(Edit1.Text);
ShowMessage(IntToStr(Ord(S[1])));
end;

homayoon_fara
جمعه 27 شهریور 1388, 12:43 عصر
مجددا سلام

از وقتی که من از دلفی 7 سوییچ کردم رو دلفی 2009 کماکان با این مشکل درگیر شدم.
اونم اینه که وقتی که query میگیرم ، 2008 sql server همه حروف فارسی رو پیدا می کنه الا حرف "ی فارسی" که کد یونیکدش 1740 هستش اما اگر به جای اون از "ي عربی" که کد یونیکدش 1610 هست استفاده کنم ، اونوقت تو query درست عمل می کنه.
بعد گفتم یه خورده دقیق تر عمل کنم ، رفتم از اینترنت و جدول یونیکد عربی و فارسی رو گرفتم. دیدم این مشکل (یعنی سرچ نشدن حروف توسط sql server) فقط مربوط به "ی فارسی" نمیشه و کرکتر هایی که کد آنها بعد از 1711 (حرف "گ") قرار داره و همینطور حروفی که قبل از 1570 (حرف "آ") قرار دارند اکثرا توسط sql server قابل شناسایی نیستند مثل حرف "ی فارسی" که 1740 است و یا حرف " ۞" که 1758 است و علامت شروع حذب هستش.
دقیقا نمیدونم ایراد از چیه اما حس میکنم sql server تو تنظیمات collationهاش یه موردی داره. گرچه انواع و اقسام collationها رو ست کرده و باز هم نشد ، هم collationهای عربی هم فارسی.
بعد اومدم یک برنامه ساده نوشتم شامل یک dbgrid و یک edit جهت جستجو. 2 تا table یکسان هم درست کرد یکی تو sql server و دیگری توی access. برنامم با sql server مشکلاتی رو که گفتم داره اما با access هیچ ایرادی نداره- کلیه حروف با هر کدی که باشند راحت سرچ میشن.
یک ایراد هم تو جدول یونیکد دیدم اونم اینکه کد حرف "ه" قبل از حرف "واو" قرار داره یعنی وقتی که database رو سورت میکنم این شکلی سورت میشه: ..... ل م ن ه و ی که غلطه و در اصل باید اینجوری باشه ..... ل م ن و ه ی.
گیج شدم حسابی. دوستان کسی میدونه اشکال از کجاست؟

vcldeveloper
جمعه 27 شهریور 1388, 18:49 عصر
دقیقا نمیدونم ایراد از چیه اما حس میکنم sql server تو تنظیمات collationهاش یه موردی داره.
بهتره در تالار SQL Server مطرح کنید.