کمک جهت تبدیل رشته هگزادسیمال به فارسی
سلام محضر اعضا محترم گروه
قصد دارم رشته های هگزادسیمال مانند رشته زیر را به فارسی برگردانم از تابع زیر استفاده کردم خطای type mismatch l می دهد. لطفا راهنمایی بفرمایید
=D9=82=D8=A7=D8=B3=D9=85=20=20=D8=B7=D8=B1=D8=A7=D 8=B2=DB=8C=20=20=2D=
Function DecodeUTF8String(encodedString As String) As String
Dim byteArray() As Byte
Dim decodedString As String
' تبديل رشته به آرايه بايت
byteArray = HexToBytes(encodedString)
' تبديل آرايه بايت به رشته UTF-16
decodedString = StrConv(byteArray, vbUnicode)
DecodeUTF8String = decodedString
End Function
Function HexToBytes(hexString As String) As Byte()
Dim i As Long
Dim byteCount As Long
Dim result() As Byte
byteCount = Len(hexString) \ 2
ReDim result(byteCount - 1)
For i = 0 To byteCount - 1
result(i) = CByte("&H" & Mid(hexString, i * 2 + 1, 2))
Next i
HexToBytes = result
End Function
Sub TestDecodeB()
Dim originalString As String
originalString = "=D9=82=D8=A7=D8=B3=D9=85=20=20=D8=B7=D8=B1=D8=A7= D8=B2=DB=8C=20=20=2D="
MsgBox DecodeUTF8String(originalString)
End Sub
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
سلام و روز خوش
این رشته ای که دارین به فرمت hex نیست!
به جز این حواستون به کدهای پیشنهادی هوش ساختگی هم باشه، سوراخ سمبه زیاد داره!
البته این ظاهرش درست بنظر میاد و اگر رشته hex واقعی داشته باشین باید کار کنه (تست نکردم).
1 ضمیمه
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
سلام بی زحمت تست بفرمایید. بله در این کد رشته را ظاهرا به هگز تبدیل بعد ترجمه می کنه ولی مشکل داره. ممنون میشم راهنمایی بفرمایید. در اصل این متن خروجی یک فایل vcf در اکسل هست.
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
سلام دوباره
خب این رشته ها فرمتشون hex نیست و موقع ایمپورت کانورت شده،
2 بایت بوده که بجای بایت بالا = گذاشته شده.
شما اصل دیتا رو پیوست کنین.
1 ضمیمه
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
سلام
اصل فایل تماس ها چندین هزار شماره است که وقتی به این برنامه ایمپورت کردم جدولی را ساخت که رشته موضوع بحث در آن دیده میشود. در جدول دیگر یک vcf به صورت آنلاین ساختم که خروج جدولی شد که با حروف خاص دیده می شود
ضمنا اگر خط زیر را در سایت https://dencode.com/string/quoted-printable قرار دهیم به فارسی بر می گرداند
=D8=B9=D9=84=D9=8A=20=D8=A7=D8=B3=D9=85=D8=A7=D8=B 9=D9=8A=D9=84=D9=8A=
برگردان: علی اسماعیلی
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
برنامه پیوست رو دیدم،
گویا کدها در اکسل بوده که آوردین به اکسس.
چون همه اون connection ها بیخودی هست و نیازی بهش نیست.
شما کارتون رو باید به 2 بخش (دست کم) بشکنین و هر کدوم رو جدا انجام بدین و تست کنین،
1- یک فانکشن بنویسین که یک آدرس یک text file (با انکودینگ utf-8) رو بگیره
و محتوای اون بصورت string برگردونه.
2- یک روتین بنویسین که که محتوای یک فایل رو به صورت string بگیره،
اون رو خط به خط parse کنه و دیتا رو بیرون بکشه و در جدول بریزه.
1 ضمیمه
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
برای بخش 1 شما از filesystemobject استفاده کردین،
ولی دقت نکردین که textstream در fso از utf-8 پشتیبانی نمیکنه!
این خروجی کدی هست که استفاده کردین (مشخصا از هوش ساختگی گرفتین!)
ضمیمه 156105
2 ضمیمه
VBA Read Text File with UTF-8 Encoding
باید از adodb.stream استفاده کنین که در اون adodb.stream دارین
و اون میتونه از utf-8 استفاده کنه.
اول اضافه کردن رفرنس:
ضمیمه 156109
Public Function ReadFile(FilePath As String) As String
Dim Stream As New Stream ' ADODB.stream
With Stream
.Type = adTypeText
.Charset = "UTF-8"
.Open
.LoadFromFile FilePath
ReadFile = .ReadText
.Close
End With
Set Stream = Nothing
End Function
و تست کد :
ضمیمه 156110
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
حالا میتونین بخش 2 رو بنویسین.
قبل از هر چیز باید فرمت دیتا رو بدونین چی هست و چه فیلدهایی ممکنه داشته باشین:
مثلا EMAIL یا ADR (و خیلی فیلدهای دیگه مثل PHOTO و GENDER ) اینجا نیست،
یا فیلد N به جز دو بخش اول (last name و given name یا نام خانوادگی و نام) سه بخش دیگه هم داره (پیشوند و پسوند و عنوان مثل آقا، سرکار، دکتر، مهندس، ....)
یا TEL میتونه چند نوع باشه (CELL, WORK, HOME, ...) و همین ها هم میتونن چند زیرگونه داشته باشن.
باید حتما دقیق مشخص باشه که آیا فقط همین فیلدهای در فایل نمونه رو دارین یا ممکنه فیلدهایی که گفته شد هم باشه.
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
تشکر از همه راهنمایی های ارزنده تون. الان مشکل این هست که vcf اصلی که حاوی مخاطبین من هست را با نوت پد باز می کنم این فایل به صورت زیر نشان داده میشه. در اصل من باید بعد همین عبارات را به فارسی برگردانم
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D8=B9=D9=84=D9=8A=20=D8=A7=D8=B3=D9=85 =D8=A7=D8=B9=D9=8A=D9=84=D9=8A=
=2D=20=D8=AD=D9=88=D8=B2=D9=87=20=D9=86=D9=88=D8=B 1=20=D9=88=20=D9=85=
=D8=AD=D9=85=D9=88=D8=AF=20=D8=A2=D8=A8=D8=A7=D8=A F=20=D8=A7=D8=B3=D8=
=AA=D8=A7=D9=86=20=D9=85=D8=A7=D8=B2=D9=86=D8=AF=D 8=B1=D8=A7=D9=86;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D8=B9=D9=84=D9=8A=20=D8=A7=D8=B3=D9=85= D8=A7=D8=B9=D9=8A=D9=84=D9=8A=
=2D=20=D8=AD=D9=88=D8=B2=D9=87=20=D9=86=D9=88=D8=B 1=20=D9=88=20=D9=85=
=D8=AD=D9=85=D9=88=D8=AF=20=D8=A2=D8=A8=D8=A7=D8=A F=20=D8=A7=D8=B3=D8=
=AA=D8=A7=D9=86=20=D9=85=D8=A7=D8=B2=D9=86=D8=AF=D 8=B1=D8=A7=D9=86
TEL;CELL;PREF:09111215682
END:VCARD
اصل دیتا من به این شکل هست
convert QUOTED-PRINTABLE to UTF-8 encoding in VBA
این vcard با اونی که در پست شماره 5 پیوست شده بود فرق داره،
و از انکودینگQUOTED-PRINTABLE استفاده شده (فکر کنم از outlook اکسپورت کردین).
شما اگر میتونین با همون فرمت قبلی کار کنین که دردسر نداره و همون کد پست شماره 8 برای خوندن فایل کافی هست،
البته بخش parse کردن دیتا جداست.
اگر اصرار دارین حتما به همین روش بخونین (که از رده خارج هم هست)
همون روش پست 8 (با کمی تغییر) هنوز قابل استفاده هست،
ولی کار شما سخت تر و پیچیده تر میشه.
چون مجبورین اول بخشهای انکود شده رو دیکد کنین،
و لازمه اش این هست که اول اونها رو جدا کنین،
و قسمت سختش همینجاس چون در حالت کلی کارکتر انکود شده ممکنه به 1 یا 2 یا 3 بایت تبدیل شده باشه،
و اینها هر کدوم signature خاصی دارن که باید همشون چک بشه.
ولی اگر میتونین گارانتی کنین که فقط دوبایت دارین کمی راحتتر میشه (منظور بخش بیرون کشیدن دیتا هست).
در این صورت بعد از خوندن بخش انکود شده
اون رو به byte array تبدیل میکنین و در یک stream از نوع باینری میریزین (همون adodb.stream و نه textstream)
و حالا نوع استریم رو text و charset اون رو utf-8 میذارین و استریم رو در string میریزین.
اینجوری خودکار تبدیل انجام میشه.
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
نقل قول:
نوشته شده توسط
mohammadsaleh
تشکر از همه راهنمایی های ارزنده تون. الان مشکل این هست که vcf اصلی که حاوی مخاطبین من هست را با نوت پد باز می کنم این فایل به صورت زیر نشان داده میشه. در اصل من باید بعد همین عبارات را به فارسی برگردانم
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D8=B9=D9=84=D9=8A=20=D8=A7=D8=B3=D9=85 =D8=A7=D8=B9=D9=8A=D9=84=D9=8A=
=2D=20=D8=AD=D9=88=D8=B2=D9=87=20=D9=86=D9=88=D8=B 1=20=D9=88=20=D9=85=
=D8=AD=D9=85=D9=88=D8=AF=20=D8=A2=D8=A8=D8=A7=D8=A F=20=D8=A7=D8=B3=D8=
=AA=D8=A7=D9=86=20=D9=85=D8=A7=D8=B2=D9=86=D8=AF=D 8=B1=D8=A7=D9=86;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D8=B9=D9=84=D9=8A=20=D8=A7=D8=B3=D9=85= D8=A7=D8=B9=D9=8A=D9=84=D9=8A=
=2D=20=D8=AD=D9=88=D8=B2=D9=87=20=D9=86=D9=88=D8=B 1=20=D9=88=20=D9=85=
=D8=AD=D9=85=D9=88=D8=AF=20=D8=A2=D8=A8=D8=A7=D8=A F=20=D8=A7=D8=B3=D8=
=AA=D8=A7=D9=86=20=D9=85=D8=A7=D8=B2=D9=86=D8=AF=D 8=B1=D8=A7=D9=86
TEL;CELL;PREF:09111215682
END:VCARD
اصل دیتا من به این شکل هست
اصل فایل رو پیوست کنین چون ادیتور گاهی به هم میریزه متن رو (اینجا هم همین کار رو کرده)
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
تشکر از صبر و حوصله استاد و کمک به حل مشکل.
فایل Vcf را از قسمت manage contacts از خود گوشی گرفتم. و اگر خود شما هم شماره هاتون را اکسپورت کنید فایل شما هم به همین صورت در نوت پد باز میشه و اگر با همین فایل اکسس هم به جدول ایمپورتش کنید نوشته های فارسی به صورت انکودینگ QUOTED-PRINTABLE وارد میشه
نقل قول: کمک جهت تبدیل رشته هگزادسیمال به فارسی
نقل قول:
نوشته شده توسط
mohammadsaleh
تشکر از صبر و حوصله و کمک به حل مشکل.
فایل Vcf را از قسمت manage contacts از خود گوشی گرفتم. و اگر خود شما هم شماره هاتون را اکسپورت کنید فایل شما هم به همین صورت در نوت پد باز میشه
برای من که version 3 میاد!
شما دیگه ناچار هستین همین روش پست شماره 11 رو برین جلو.