ورود

View Full Version : تبدیل کلمه فارسی به کد اینترنتی



bijansaba
دوشنبه 28 آبان 1386, 16:31 عصر
با عرض سلام

من میخواستم بدانم آیا تابعی در فاکس هست که یک رشته فارسی را به آدرس اینترنتی آن تبدیل کند
به عنوان مثال

کلمه "ایران" که کد اینترنتی آن میشود%D8%A7%DB%8C%D8%B1%D8%A7%D9%86

با عرض تشکر

rezaTavak
سه شنبه 29 آبان 1386, 08:33 صبح
سلام

ضمن خوش آمد گویی به شما باید عرض کنم که این چیزی که شما می خواهید utf8 است یعنی یک کد هگزا دسیمال از هر کارکتری به هر زباتی.


اما زبانهای مختلف مانند فارسی، چینی، عربی، اردو، افریقایی، ژاپنی و... در دنیا وجود دارند که هر کدام کد مخصوص به خود را دارند و همه در یک جا به اسم فونت یونیکد جمع می شود.

فونتها دو نوعند یونی کد و معمولی.

در ویندوز ۲۰۰۰ و بالاتر همه فونتها unicode تعریف می شوند.





اما از سویی دیگر در اینترنت برای ارسال کد کاراکتر از ٪ استفاده می شود. مثلا برای ارسال فاصله از کد20% استفاده میشود. و مثلا دابل کوتیشن " از کد %32 و...



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

اما شما در ویندوز با کد CP1256 کار می کنید یعنی کد پیج ۱۲۵۶ یا ویندوز عربی.


یک برنامه برای تبدیل این کد به utf نوشتم:
http://barnamenevis.org/forum/showthread.php?t=60159

تابع FUNCTION Cp1256ToUtf8No برای تبدیل یک حرف به کدمعادل آن است. مثلا با ارسال هر حرف کدی به شما نمایش داده خواهد شد. که معادل یونیکد است.



اما در اینترنت:
برای ارسال چیزی به یک سرور مانند google از قاعده زیر تبعیت می شود:

نوع پروتکل:
http,ftp, و...
بعد از آن ://
مسیر فایل cgi روی سرور (اگر راجع به cgi خواستید بگید بگم)
مثلا www.google.com/search (http://www.google.com/search)
حال برای ارسال پارامتر از علامت سوال استفاده میکنیم
سپس یکی یکی پارامترها را می نویسیم و بین آن & می گذاریم. برای مقدار هم از = استفاده کنید.
مثلا:


http://www.google.com/search?hl=en&client=firefox-a&rls=com.ubuntu%3Aen-US%3Aofficial&hs=QhL&q=%D9%85%D8%AD%D9%85%D8%AF+%D8%B1%D8%B6%D8%A7+%D8% AA%D9%88%DA%A9%D9%84&btnG=Search
از طولانی بودنش نترسید مهم نیست.
پروتکل: http
مسیر فایل: /www.google.com/search
اما پارامترها: hl=en پارامتر اول است client=firefox-a پارامتر دوم rls=com.ubuntu%3Aen-US%3Aofficial پارامتر سوم و... اما ببینید در کد برای ارسال از ٪ استفاده شده است.

مثلا برای جستجو در گوگل برای کلمه ALI کد زیر کافیست:

http://www.google.com/search?q=%41%4c%49 (http://www.google.com/search?q=41%4c%49%)

که مساوی زیر است:

http://www.google.com/search?q=ALI

حتی می توانید کدها را هم بگویید utf8 است:
http://www.google.com/search?q=ALI&ie=utf-8&oe=utf-8

یعنی Input Encoding=ie و Output Encoding = oe و q هم یعنی query ( البته حدس من است)

bijansaba
سه شنبه 29 آبان 1386, 12:37 عصر
با عرض تشکر از راهنمای شما
ولی خروجی درست در نیامد

من به این صورت از تایع استفاده کردم

اول کپی تابع در یک فایل prg این دوخط را در بالای آن اضافه کردم

ss =
Cp1256ToUtf8no("علی")
?ss
ولی خروجی درست در نیامد

rezaTavak
سه شنبه 29 آبان 1386, 18:18 عصر
باید حرف به حرف ارسال می کردید.

یعنی با یه همچین چیزی:


function Str_Cp1257_UTF8
Lparameter str
local i,lnStr
for i=1 to len(str)
lnStr=Cp1256ToUtf8no(substr(str,i,1))
next
return lnStr


در ضمن شما باید آن لیستlcUtf8 در تابع Cp1256ToUtf8no را طوری تغییر دهید که به جای ارسال فقط عدد ٪ هم قبل از هر عدد هگز باشد.

bijansaba
چهارشنبه 30 آبان 1386, 10:03 صبح
نتوانستم علامت درصد را بین حروف قرار دهم ممکن است راهنمایی بفرمائید.

این کد را نوشتم ولی درست در نیامد


ss=Str_Cp1257_UTF8('خا')
?ss
function Str_Cp1257_UTF8
Lparameter str
local i,lnStr,lnStr1
lnStr1=''
for i=1 to len(str)
lnStr=Cp1256ToUtf8no(substr(str,i,1))

aa1= substr(lnStr,1,2)
aa2= substr(lnStr,3,2)
aa3=aa1+aa2
*?aa1
*?aa2
lnStr1 = lnStr1 + '%'+aa3
next
return lnStr1

rezaTavak
چهارشنبه 30 آبان 1386, 11:39 صبح
من خودم یک تابع برایتان نوشتم.

یا کد زیر


FUNCTION Cp1256ToUtf8InternetChar
LPARAMETERS tcStr
LOCAL i,lcReturnStr
lcReturnStr = ''
FOR i=1 TO LEN(tcStr)
lcReturnStr=lcReturnStr+Cp1256ToUtf8no(SUBSTR(tcSt r,i,1))
NEXT
RETURN lcReturnStr
ENDFUNC


FUNCTION Cp1256ToUtf8No
LPARAMETERS tcChar
LOCAL lcUtf8,lnComma1,lnComma2, lnChar, lcRet1
lnChar = ASC(tcChar)
IF lnChar=0
RETURN "00"
ENDIF
lcUtf8 = "00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,"+;
"10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,"+;
"20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F,"+;
"30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F,"+;
"40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F,"+;
"50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F,"+;
"60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F,"+;
"70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F,"+;
"E282AC,D9BE,E2809A,C692,E2809E,E280A6,E280A0,E280A 1,CB86,"+;
"E280B0,D9B9,E280B9,C592,DA86,DA98,DA88,DAAF,E28098 ,E28099,"+;
"E2809C,E2809D,E280A2,E28093,E28094,DAA9,E284A2,DA9 1,E280BA,"+;
"C593,E2808C,E2808D,DABA,C2A0,D88C,C2A2,C2A3,C2A4,C 2A5,"+;
"C2A6,C2A7,C2A8,C2A9,DABE,C2AB,C2AC,C2AD,C2AE,C2AF, C2B0,"+;
"C2B1,C2B2,C2B3,C2B4,C2B5,C2B6,C2B7,C2B8,C2B9,D89B, C2BB,"+;
"C2BC,C2BD,C2BE,D89F,DB81,D8A1,D8A2,D8A3,D8A4,D8A5, D8A6,"+;
"D8A7,D8A8,D8A9,D8AA,D8AB,D8AC,D8AD,D8AE,D8AF,D8B0, D8B1,"+;
"D8B2,D8B3,D8B4,D8B5,D8B6,C397,D8B7,D8B8,D8B9,D8BA, D980,"+;
"D981,D982,D983,C3A0,D984,C3A2,D985,D986,D987,D988, C3A7,"+;
"C3A8,C3A9,C3AA,C3AB,D989,D98A,C3AE,C3AF,D98B,D98C, D98D,"+;
"D98E,C3B4,D98F,D990,C3B7,D991,C3B9,D992,C3BB,C3BC, E2808E,"+;
"E2808F,DB92,"

lnComma1 = AT(",",lcUtf8,lnChar)
lnComma2 =AT(",",lcUtf8,lnChar+1)
lcRet1 = SUBSTR(lcUtf8,lnComma1+1,lnComma2-lnComma1-1)
lcRet1 = IIF(LEN(lcRet1)>5,STUFF(lcRet1,5,0,"%"),lcRet1)
lcRet1 = "%"+IIF(LEN(lcRet1)>3,STUFF(lcRet1,3,0,"%"),lcRet1)
RETURN lcRet1
ENDFUNC

یا دانلود کنید.

bijansaba
چهارشنبه 30 آبان 1386, 13:12 عصر
جناب توکل شما امتحان بفرمائید مثلا عبارت "کا"را به این تابع بدهید خروجی میشود
DAA9D8A7

من "کا" را به تابع دادم و خروجی بالا را گرفتم
ss=Cp1256ToUtf8InternetChar('کا')

bijansaba
چهارشنبه 30 آبان 1386, 13:44 عصر
منظورم این است که وقتی میخواهم علامت درصد را مابین آنها بدهم به هم میریزد
شما امتحان بفرمائید سعی کنید علامت درصد را مابین خروجی تابه بین حروف بگذارید
به هم میریزد
آیا خروجی تابع بک متغیر کارکتری است به نظر میرسد وقتی میخواهیم خروجی تابع را جدا کنیم تا علامت درصد رابینشان بگذاریم دچار مشکل میشویم

sassan
چهارشنبه 30 آبان 1386, 14:13 عصر
من میخواستم بدانم آیا تابعی در فاکس هست که یک رشته فارسی را به آدرس اینترنتی آن تبدیل کند
به عنوان مثال

کلمه "ایران" که کد اینترنتی آن میشود%D8%A7%DB%8C%D8%B1%D8%A7%D9%86



می بخشید من یکم از مرحله پرتم ... می تونم بدونم این مورد کلا" به چه دردی میخوره و چه زمانی استفاده میشه ؟ :گیج:

bijansaba
چهارشنبه 30 آبان 1386, 15:01 عصر
جناب توکل خیلی ممنون درست شد خروجی با درصد هم جواب داد
اما من این کد را در رویداد کلیک یک کامند باتم گذاشتم تا یک کلمه را از یک تکس باکس گرفته وخروجی ut8 بدهد اما یک خطا گرفتم که
method and event can not contain nested prosedure and class definition

لطف کنید بفرمائید ایا این کد را به صورت یک prg به برنامه خود باید اضاه کنم وآن را صدا بزنم
تا یک کلمه را به آن پاس دهم وخروجی بگیرم یا راه دیگری هم هست

bijansaba
چهارشنبه 30 آبان 1386, 15:06 عصر
جناب ساسان سلام
بعضی وقتها شما میخواهید از طریق فاکس پرو به اینترنت وصل شده ویک عنوان فارسی را در یک بانک اینترنتی جستجو کنید ونتیجه را به کاربر نشان دهید بنا براین باید عنوان فارسی را به این کدها تبدیل کنید تا این امکان فراهم شود البته در بعضی از سایت میشود خود فارسی را جستجو کرد اما برای بعضی از سایتها احتیاج به کد ut8 دارد که این کد جناب توکل این کار را انجام میدهد

rezaTavak
پنج شنبه 01 آذر 1386, 07:40 صبح
متدها و رویدادها خودشان یک function هستند. که شما اگر scx را باز کنید آنها را در فیلد objcode یکجا خواهید دید. شما بهتر است آنرا در متدها صدا بزنید مثلا:


lcRetCahrs = Cp1256ToUtf8InternetChar("reza")


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

bijansaba
شنبه 03 آذر 1386, 07:35 صبح
جناب توکل خیلی ممنون برنامه بسیار خوب کار میکند

mehran_337
شنبه 03 آذر 1386, 08:24 صبح
بعضی وقتها شما میخواهید از طریق فاکس پرو به اینترنت وصل شده ویک عنوان فارسی را در یک بانک اینترنتی جستجو کنید ونتیجه را به کاربر نشان دهید بنا براین باید عنوان فارسی را به این کدها تبدیل کنید تا این امکان فراهم شود البته در بعضی از سایت میشود خود فارسی را جستجو کرد اما برای بعضی از سایتها احتیاج به کد ut8 دارد که این کد جناب توکل این کار را انجام میدهد

ببخشید می شه بگین شما چطوری با فاکس توی بانکهای اینترنتی سرچ می کنید؟:متعجب:

bijansaba
یک شنبه 04 آذر 1386, 07:35 صبح
با سلام آقا مهران

مثلا سایت لغت نامه نامه عربی زیر

http://qamoos.sakhr.com/idrisidic_1.asp?Sub=%da%c7%cf%ca
یک صفحه اینترنتی است که یک بانک لغت است

که کافی است به جای واژه عربی عبارت مقابل را قرار دهی
=%da%c7%cf%ca
تابع آقای توکل این تبدیل را انجام میدهد حالا باید راهی برای اتصال پیدا کنیم
همین که تابع تبدیل رو داریم یک قدم جلو هستم

mehran_337
یک شنبه 04 آذر 1386, 07:53 صبح
منظورم اینه که با فاکس نوشته شده؟

rezaTavak
یک شنبه 04 آذر 1386, 12:31 عصر
نه با asp است و بیسیک.



از این راه استفاده کنید که این فرم را دانلود کنید.

ممکن است مسیرها را دوباره مجبور شوید تعریف کنید.

دو کلاس ـwebview و _resize از کلاسهای مثال است که در این فرم بکار برده شده است مسیر نصب فاکس و samles/solution و کلاسهای webvwr برای اولی و solution را برای دومی به آن معرفی کنید.

فرم را اشتباهی گذاشتم فردا دوباره می سازم و می گذارم