PDA

View Full Version : سوال: چگونه می توان encoding یک رشته را مشخص و پس از تشخیص می آنرا ویرایش یا به utf-8 تغییر داد؟



meghdad.safari
جمعه 13 بهمن 1391, 09:52 صبح
با سلام خدمت دوستان عزیز
من دارم از یک فایل xml اطلاعات رو می خونم وپس از پردازش به یک فایل dxf تبدیل می کنم.
در این بین با کلمات فارسی مشکل دارم.
وقتی من دادۀ فارسی رو از فایل xml می خونم و میخوام ویرایشش کنم شکلش به هممیخوره مثلاً عبارت "دهیاری گیلاکجان" روبه شکل "ط¯ظ‡غŒط§ط±غŒ ع¯غŒظ„ط§ع©ط¬ط§ظ†" در میاره.
منفقط میخوام حروف "ی" در عبارت انتخابی به "u\+06cc" تغییر کنه اما تا میخوام از طریق تابع replace این کار رو روی عبارت "دهیاری گیلاکجان" انجام بدم ؛ کل عبارت بهم میخوره.
ضمناً تا وقتی میخوامعبارات روتز فایل بخونم وداخل یک collection یا یک فایل بنویسم مشکلی پیش نمی یاد. اما تا قصد انجام تغییرات رو دارم خراب میشه.:متعجب:
می دونم که vb امکان پشتیبانی از unicode را نداره اما من فقط میخوام یک حرف از یک عبارت تغییر کنه
حالا من نمی دونم vb این رشته رو چطور بهم میریزه تا خودم برگردونمش.
این رشته رو encode می کنه ، یا روش دیگه ای داره؟
اگر encode می کنه ؛ به کدوم فرمت درش میاره ؟
ولله من که توش موندم:متفکر:
از تابع strconv با هر دو گزینۀ vbUnicode و vbFromUnicode هم استفاده کردم اما قبی از اینکه تابع کاری انجام بده ، برنامهرشته رو بهم میریزه
لطفاً:افسرده::افسرده: کمکم کنید

the king
جمعه 13 بهمن 1391, 12:34 عصر
با سلام خدمت دوستان عزیز
من دارم از یک فایل xml اطلاعات رو می خونم وپس از پردازش به یک فایل dxf تبدیل می کنم.
در این بین با کلمات فارسی مشکل دارم.
وقتی من دادۀ فارسی رو از فایل xml می خونم و میخوام ویرایشش کنم شکلش به هممیخوره مثلاً عبارت "دهیاری گیلاکجان" روبه شکل "ط¯ظ‡غŒط§ط±غŒ ع¯غŒظ„ط§ع©ط¬ط§ظ†" در میاره.
منفقط میخوام حروف "ی" در عبارت انتخابی به "u\+06cc" تغییر کنه اما تا میخوام از طریق تابع replace این کار رو روی عبارت "دهیاری گیلاکجان" انجام بدم ؛ کل عبارت بهم میخوره.
ضمناً تا وقتی میخوامعبارات روتز فایل بخونم وداخل یک collection یا یک فایل بنویسم مشکلی پیش نمی یاد. اما تا قصد انجام تغییرات رو دارم خراب میشه.:متعجب:
می دونم که vb امکان پشتیبانی از unicode را نداره اما من فقط میخوام یک حرف از یک عبارت تغییر کنه
حالا من نمی دونم vb این رشته رو چطور بهم میریزه تا خودم برگردونمش.
این رشته رو encode می کنه ، یا روش دیگه ای داره؟
اگر encode می کنه ؛ به کدوم فرمت درش میاره ؟
ولله من که توش موندم:متفکر:
از تابع strconv با هر دو گزینۀ vbUnicode و vbFromUnicode هم استفاده کردم اما قبی از اینکه تابع کاری انجام بده ، برنامهرشته رو بهم میریزه
لطفاً:افسرده::افسرده: کمکم کنید

فایل رو XML رو چطور می خوانید؟ اگه Open For Input می کنید برای خواندن فایل های متنی Unicode مناسب نیست. For Input ئه ویژوال بیسیک 6 برای
خواندن فایل های Unicode آمادگی نداره. فایل رو Binary بخوانید تا ساختار Unicode رشته تغییر نکنه.
رشته های ویژوال بیسیک ذاتا Unicode اند و تا زمانی که فقط با رشته و توابع رشته ای کار می کنید مشکلی نیست.


Private Function ReadFile(ByVal Path As String) As String
Dim Buffer() As Byte
Dim IDCode As Integer
On Error Resume Next
Open Path For Binary As #1
If LOF(1) > 0 Then
Get #1, 1, IDCode
If IDCode = &HFEFF Then
If LOF(1) > 2 Then
ReDim Buffer(0 To LOF(1) - 3) As Byte
Get #1, 3, Buffer
ReadFile = Buffer
Else
ReadFile = ""
End If
Else
ReDim Buffer(0 To LOF(1) - 1) As Byte
Get #1, 1, Buffer
ReadFile = StrConv(Buffer, vbUnicode)
End If
Else
ReadFile = ""
End If
Close #1
End Function


مثلا :

Text1.Text = ReadFile ("C:\File.txt")


رجوع شود به :
پنجره showopen و showsave (http://forum.majidonline.com/threads/38567?p=620679&viewfull=1#post620679)


Private Function UnicodeToUTF8(ByVal Value As String) As Byte()
Dim Pos As Long
Dim Ch As Long
Dim Length As Long
Dim bytes() As Byte
Dim Count As Long
Count = Len(Value)
ReDim bytes(0 To Count * 3)
For Pos = 1 To Count
Ch = AscW(Mid(Value, Pos, 1))
Select Case Ch
Case 0 To 127
bytes(Length) = Ch
Length = Length + 1
Case 128 To 2047
bytes(Length) = (Ch \ &H40&) Or &HC0&
bytes(Length + 1) = (Ch And &H3F&) Or &H80&
Length = Length + 2
Case Else
bytes(Length) = (Ch \ &H90&) Or &HEA&
bytes(Length + 1) = ((Ch \ &H40&) And &H3F&) Or &H80&
bytes(Length + 2) = (Ch And &H3F&) Or &H80&
Length = Length + 3
End Select
Next
ReDim Preserve bytes(0 To Length - 1)
UnicodeToUTF8 = bytes
End Function


مثلا :

Dim bytes() As Byte
bytes = UnicodeToUTF8("This is a sample")