PDA

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



majidas2006
جمعه 03 تیر 1390, 18:22 عصر
سلام
من مشکل دارم وقتی با winsock یه سورس رو میخونم فارسی ها رو خراب میکنه
چجوری کاراکتر های فارسی رو از فایل های html درست بخونم؟
تو head صفحه html ام گفتم که utf-8 باشه

_behnam_
شنبه 04 تیر 1390, 14:35 عصر
از فانکشن یونیکد استفاده کنید

majidas2006
شنبه 04 تیر 1390, 15:40 عصر
جدا جواب قاطعانه ای بود
خوب فنکشنش رو داشتم که اینجا پیغام نمی دادم

M.T.P
شنبه 04 تیر 1390, 15:47 عصر
از تایع StrConv استفاده کن.

majidas2006
شنبه 04 تیر 1390, 17:38 عصر
مرسی ولی اگه میشه توضیح بدید
ببین من از این استفاده می کنم

Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
winsock1.GetData data, vbString, bytesTotal
MsgBox data

وقتی چاپ میشه جملات فارسی خراب چاپ میشن
الان همه چی که دریافت میشه تو متغیر استرینگ data قرار میگیره
من چکاری روش انجام بدم؟
از StrConv چجوری برای تبدیل data به unicode استفاده کنم؟

M.T.P
شنبه 04 تیر 1390, 17:55 عصر
Data = StrConv(Data, vbFromUnicode)

آرگومان دوم این تابع چند ثابت داره به نوبت تستشون کنید.

majidas2006
شنبه 04 تیر 1390, 18:14 عصر
تست کردم نشد
Data = StrConv(Data, vbFromUnicode) این رو زدم همه چی ? شد

M.T.P
شنبه 04 تیر 1390, 18:32 عصر
بقیه چی؟ 9 تا حالت داره.

اینو تست کن:

Data = StrConv(Data, vbUnicode)

majidas2006
شنبه 04 تیر 1390, 19:47 عصر
اونم تست کردم به جای کل جملات فقط یه عدد 8 زد و یه عدد 2
اصلا جملاتو نداد

M.T.P
شنبه 04 تیر 1390, 20:01 عصر
دیتا رو از مبدا چطوری می خونی ارسال می کنی؟

_behnam_
یک شنبه 05 تیر 1390, 18:29 عصر
Data = UTF8_Decode(Data)

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
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

M&#00&#00
جمعه 10 تیر 1390, 20:07 عصر
Dim MyData As String
Winsock1.GetData MyData$