delphi4arab منتديات دلفي للعرب
دالة لحذف التشكيل تعمل في الدلفي ولا تعمل في Firebird - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : دالة لحذف التشكيل تعمل في الدلفي ولا تعمل في Firebird (/showthread.php?tid=2201)



دالة لحذف التشكيل تعمل في الدلفي ولا تعمل في Firebird - bahmani - 18-07-2010

السلام عليكم ورحمة الله

إخواني الكرام، أردت برمجة دالة خارجية لـ FireBird (UDF) عن طريق الدلفي 2009، جربت الدالة في الدلفي عملت بنجاح، لكن في FireBird لا تعمل أي شئ ، ترجع لي نفس القيمة التي أدخلتها،

كود :
function withowtTachkil(Const Text : PChar) : PChar; cdecl; var S : String; L : string; C : Char; begin S := string(Text); for C := #$064E to #$0652 do begin S:= StringReplace(S,C,'',[rfReplaceAll]); end; L := S; Result := Pchar(L); end;


بالتوفيق، وشكرا


دالة لحذف التشكيل تعمل في الدلفي ولا تعمل في Firebird - bahmani - 21-07-2010

السلام عليكم ورحمة الله

بعد تجريب كل الإحتمالات - الحمد لله - توصلت إلى مايلي :

كود :
function withowtTachkil(Const Text : PAnsiChar) : PAnsiChar; cdecl; var c: Char; S : string; AText ,R: AnsiString; i,j : Integer; begin AText := AnsiString(Text); S := UTF8ToWideString(A); for C := #$064B to #$0652 do //الحركات begin S:= StringReplace(S,C,'',[rfReplaceAll]); end; R := UTF8Encode(S); Result := PAnsiChar(R); end;

على ما يبدو، FireBird يرسل القيم النصية بترميز UTF8، لذلك يجب تحويلها إلى Unicode لتستطيع التعامل معها

من له شرح أوضح اهذه القضية فليتفضل

بالتوفيق وشكرا