PDA

View Full Version : مشکل وینسوک در پشتیبانی از زبان فارسی



IranVB
یک شنبه 31 اردیبهشت 1391, 15:48 عصر
سلام به همه دوستان برنامه نویس
متاسفانه پروژه من به یک مشکل پایه برخورد کرده است

من با winsock اطلاعات فارسی را به یک سایت مشخص ارسال میکنم و اطلاعات دریافتی هم فارسی است منتها مشکل من اینجاست که زبان فارسی نه در ارسال و نه در اطلاعات دریافت شده پشتیبانی نمیشود یعنی اطلاعات فارسی گرفته شده کاراکترهای نا مفهوم هستند، خیلی ممنون میشوم اگر کسی از دوستان قبلا اگر با این مشکل مواجه شده مرا هم راهنمایی کند تا اطلاعات فارسی گرفته شده درست نمایش داده بشن، یعنی از چه کدی استفاده کنم :(

باتشکر از همه دوستان

M.T.P
یک شنبه 31 اردیبهشت 1391, 18:21 عصر
مشکلی نداره.

ممکنه شما بعد از دریافت دیتا رو تو فایل بریزید یا طریقی دیگه و در اون صورت فرمت متن بهم بخوره.

به هر حال یک بار با دستور زیر متن رو تبدیل کن ببین چطور میشه.


strData = StrConv(strData, vbFromUnicode)

IranVB
یک شنبه 31 اردیبهشت 1391, 20:41 عصر
سلام
خیلی ممنون، ولی باز هم برطرف نشد، وقتی که رشته دریافتی را با StrConv برمیگردانم کلیه مطالب ناخانا میشوند، winsock داخل ارسال یا دریافت مطالب انگلیسی مشکلی نداره فقط کلا با زبان های یونیکدی مثل فارسی مشکل داره، راه حل دیگه ای نیست، یه جایی تو سایت های خارجی خوندم که باید ابتدا اطلاعات ارسالی را در آرایه ای از نوع Byte بریزیم و متقابلا اطلاعات دریافتی را هم در آرایه ای از این نوع بریزم من هم همین کار روی کردم ولی بازهم همونطور بود http://www.vbforums.com/images/smilies/cry.gif
راه حل دیگه ای وجود ندارد http://www.vbforums.com/images/smilies/cry.gif

_behnam_
یک شنبه 31 اردیبهشت 1391, 23:05 عصر
یونیکد دو ویژوال بیسیک


Data = UTF8_Decode(Data)
و
Data = UTF8_Encode(Data)
public Function UTF8_Encode(ByVal sStr As String) Dim L As Long, lChar As Long, sUTF8 As String
For L& = 1 To Len(sStr)
lChar& = AscW(Mid(sStr, L&, 1))
If lChar& < 128 Then
sUTF8$ = sUTF8$ + Mid(sStr, L&, 1)
ElseIf ((lChar& > 127) And (lChar& < 2048)) Then
sUTF8$ = sUTF8$ + Chr(((lChar& \ 64) Or 192))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
Else
sUTF8$ = sUTF8$ + Chr(((lChar& \ 144) Or 234))
sUTF8$ = sUTF8$ + Chr((((lChar& \ 64) And 63) Or 128))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
End If
Next L&
UTF8_Encode = sUTF8$
End Function
'===============================Farsi nevisi
Public Function UTF8_Decode(ByVal sStr As String)
Dim L As Long, sUTF8 As String, iChar As Integer, iChar2 As Integer
sStr = Replace(sStr, "ÛŒ", UTF8_Encode("í"))
sStr = Replace(sStr, "Ù‰", UTF8_Encode("í"))
For L = 1 To Len(sStr)
iChar = Asc(Mid(sStr, L, 1))
If iChar > 127 Then
If Not iChar And 32 Then
iChar2 = Asc(Mid(sStr, L + 1, 1))
sUTF8 = sUTF8 & ChrW$(((31 And iChar) * 64 + (63 And iChar2)))
L = L + 1
Else
Dim iChar3 As Integer
iChar2 = Asc(Mid(sStr, L + 1, 1))
iChar3 = Asc(Mid(sStr, L + 2, 1))
'sUTF8 = sUTF8 & ChrW$(((iChar And 15) * 16 * 256) + ((iChar2 And 63) * 64) + (iChar3 And 63))
L = L + 2
End If
Else
sUTF8 = sUTF8 & Chr$(iChar)
End If
Next L
UTF8_Decode = sUTF8
End Function

Public Function EncodeString(StrText As String) As String
On Error Resume Next
Dim I As Integer, bEnc As String
For I = 1 To Len(StrText)
bEnc = bEnc & "%" & Hex(Asc(Mid(StrText, I, 1)))
Next
EncodeString = bEnc
End Function

IranVB
یک شنبه 31 اردیبهشت 1391, 23:24 عصر
خدا خیرتون بده، نمیدونین چقدر گیر این مشکل بودم
با تشکر از آقای ترکاشوند و اسلامی راد

alizanganeh
پنج شنبه 02 آذر 1391, 10:20 صبح
آقا دمتون گرم
منم واسه ارسال ایمیل با جیمیل مشکل داشتم که با همین کد فارسی نویسیش درست شد
دمتون گرم :قلب:

bushehri
شنبه 11 آذر 1391, 11:31 صبح
سلام ممنون و سپاس گذارم فقط یه سوال من به جای استفاده از winsock از socket lib ActiveX special استفاده میکنم آِیا روی این هم جواب میدهد؟

_behnam_
شنبه 11 آذر 1391, 17:08 عصر
سلام ممنون و سپاس گذارم فقط یه سوال من به جای استفاده از winsock از socket lib ActiveX special استفاده میکنم آِیا روی این هم جواب میدهد؟
بله مشکلی نیست.

vebcir
چهارشنبه 21 فروردین 1392, 10:24 صبح
اون 50 خط کد باید در ماژول قرار بگیره؟
من هم برای ارسال پیامک از برنامه با یک روش بهتر و ساده تر استفاده میکنم ولی با ارسال پیامک فارسی مشکل داره
حالا بگین این دو خط کد رو کجای برنامه بنویسیم؟
Data = UTF8_Decode(Data)
Data = UTF8_Encode(Data)
تا حروف فارسی از تکست باکس به یونیکد به وب ارسال بشه
ممنونم

محسن واژدی
چهارشنبه 21 فروردین 1392, 12:07 عصر
اون 50 خط کد باید در ماژول قرار بگیره؟
من هم برای ارسال پیامک از برنامه با یک روش بهتر و ساده تر استفاده میکنم ولی با ارسال پیامک فارسی مشکل داره
حالا بگین این دو خط کد رو کجای برنامه بنویسیم؟
Data = UTF8_Decode(Data)
Data = UTF8_Encode(Data)
تا حروف فاسری از تسکت باکس به یونیکد به وب ارسال بشه
ممنونم

سلام علیکم
بله بهتر هست برای اشتراک گذاری کدها را در ماژول قرار بدین

در زمان ارسال اطلاعات توسط UTF8_Encode(Data) متن را کد و در زمان دریافت نتیجه با UTF8_Decode داده کد شده را دیکد میکنیم

البته XMLHttp از فارسی هم پشتیبانی میکند، پست زیر را بررسی کنید:
http://barnamenevis.org/showthread.php?352893-%D9%BE%D8%B1%DA%A9%D8%B1%D8%AF%D9%86-%D9%88-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-(-%D8%B3%D8%A7%D8%A8%D9%85%DB%8C%D8%AA)-%D8%B5%D9%81%D8%AD%D9%87-%D9%88%D8%A8-%D8%AA%D9%88%D8%B3%D8%B7-XMLHTTP-%D8%9F%D8%9F%D8%9F&p=1556240&viewfull=1#post1556240


موفق باشید

niksalehi
چهارشنبه 26 تیر 1392, 11:40 صبح
من از همین ماژول استفاده کردم اما یازم موقع ارسال و دریافت نتیجه به صورت ؟؟؟؟؟ نمایش داده میشه


If w.State = 7 Then w.SendData UTF8_Encode(packet)


If w.State = 7 Then
w.PeekData Data
txtRes.Text = UTF8_Decode(Data)

gorgpir
دوشنبه 21 مرداد 1392, 14:34 عصر
با تشکر از شما مشکل من با فارسی حل شد اما واسه حروف سیمبل هم میشه راهنمایی کنید - ممنونم