الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة الترميز بإستخدام StrConv

بدأه MOHAMMED_ALSHAIF في 13 مايو 2010 · 1 رد · 601 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أخوتي الكرام السلام عليكم ورحمة الله وبركاته

يعجز اللسان على شكر إداريين و مشرفين وأعضاء "الفريق العربي للبرمجة" لما يقدموه من جهد كبير في تطوير المستوى التقني والبرمجي للعرب عامة

أخوتي الكرام واجهتني مشكلة وأعتقد إنّها تتعلق بالترميز مع دالة StrConv والكود التالي يشرح ما أقصد:

Dim A As String
Dim B As String
Dim C As String

A = "الفريق العربي للبرمجة"
B = StrConv(A, vbFromUnicode)
C = StrConv(B, vbUnicode)

MsgBox B
MsgBox C

عندما أقوم بتنفيذ هذا الكود , وكان إصدار نظام التشغيل وندوز إنجليزي أو عربي يعمل بشكل طبيعي وجميل :happy:

ولكن عندما يكون إصدار الوندوز إنجليزي وتم إنزال لهُ التعريب , فإن الكود لا يعمل بالشكلة المطلوب , ولا أدري لماذا ؟

وواجهتني المشكلة إيضاً عندما أريد إرسال ملف إلى جهاز آخر عن طريق الشكبة محلية أو واسعة النطاق مستخدماً Socket ونوع الإتصال TCP وبنفس المشكلة , أطريت لتحويل حزم البيانات (Data) من String إلى Byte فأحتلت المشكلة ويتم إرسال حُزم الداتا بالشكل المطلوب :)

أيضاً واجهتني المشكلة عندما أشفّر البيانات مستخدماً Rc4 يفشل فك التشفير !!!

أيضاً يمكن حدوث هذه المشكلة في حالة كان إصدار الوندوز عربي , ولكن يجب أن يكون خيار تبويب الخيارات الإقليمية (مقاييس وتنسيقات) اللغة تكون الإنكليزية(الولايات المتحدة) !!

فهل الدالة StrConv ضعيفه أم هناك نقطة لم أفهمها بعد؟

أرجوا من أهل الخبرة الإفادة وشرح تفصيلي لهذه الدالة وخاصة "vbFromUnicode" و "vbUnicode"

ولكم جزير الشكر والتقدير.

#2

لا بأس شباب ، تم حل المشكلة جزئياً , أو بالمعنى الأصح تم حلها لكن بطريقة ضعيفة بإستخدام الكود التالي:

Private Function S2B(sData As String) As Byte()
    Dim b() As Byte
    Dim I As Long

    ReDim b(Len(sData) - 1)

    For I = 1 To Len(sData)
        b(I - 1) = Asc(Mid(sData, I, 1))
    Next

    S2B = b()
End Function

Private Function B2S(bData() As Byte) As String
    Dim I As Long

    For I = 0 To UBound(bData)
        B2S = B2S & Chr(bData(I))
    Next

End Function

الكود السابق بطيء أثناء التحويل لكن يعمل بشكل صحيح , لا ينفع للمشاريع الكبيرة.

منتظرين آراء الشباب , ربما هناك طريقة أقوى وأفضل.

مواضيع مشابهة