PDA

View Full Version : کار با utf-8



just4froum
دوشنبه 08 خرداد 1391, 22:44 عصر
با سلام :

کسی کار با این نوع فایل متنی رو بلده ؟

arenaw
دوشنبه 08 خرداد 1391, 22:57 عصر
چیز زیادی نمیدونم ازش ولی میدونم چون داخل فایل هر کاراکتری میتونه قرار بگیره یه سری علامت خاص از نوع کاراکتر ها رو اول فایل ذخیره میکنه (معمولا 3 تای اولی اینجوریه) و کاراکتر های غیر استاندارد رو یه جوره دیگه ذخیره میکنه

arenaw
دوشنبه 08 خرداد 1391, 23:04 عصر
اینجا رو هم ببین یه سری روش گزاشته که چجوری اون کاراکتر هارو که با chr() نمیشه نشون داد رو نشون بدیم :
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=73598&lngWId=1

Veteran
دوشنبه 08 خرداد 1391, 23:29 عصر
اگر درست متوجه شدم باشم شما میخوای فایل هارا با این فرمت ذخیره کنی.
چون در حالت معمول این امکان وجود نداره
اگر اره
از این استفاده کن
Private Function pvWriteFile(sFile, sText, lType)
Const adSaveCreateOverWrite = 2

With CreateObject("ADODB.Stream")
.Open
If lType = 2 Then
.Charset = "Unicode"
ElseIf lType = 3 Then
.Charset = "UTF-8"
Else
.Charset = "_autodetect"
End If
.WriteText sText
.SaveToFile sFile, adSaveCreateOverWrite
End With
End Function

pvWriteFile cmd.FileName, Text1, 3

just4froum
دوشنبه 08 خرداد 1391, 23:43 عصر
اگر درست متوجه شدم باشم شما میخوای فایل هارا با این فرمت ذخیره کنی.


با تشکر از پاسختون.

من هم می خوام ذخیره کنم هم بخونم .

بهروز عباسی
دوشنبه 08 خرداد 1391, 23:45 عصر
http://fa.wikipedia.org/wiki/%DB%8C%D9%88%D9%86%DB%8C%E2%80%8C%DA%A9%D8%AF

Veteran
دوشنبه 08 خرداد 1391, 23:56 عصر
ذخیره که گفتم.
خوندن رو نمیدونم یعنی اصلا مگه واسه خوندنم مشکل داره ؟ تاحالا تست نکردم.

arenaw
سه شنبه 09 خرداد 1391, 01:31 صبح
ذخیره که گفتم.
خوندن رو نمیدونم یعنی اصلا مگه واسه خوندنم مشکل داره ؟ تاحالا تست نکردم.
تو utf 8 فقط اینگیلیسی هارو میشه عادی خوند , مثلا واسه فارسی ممکنه کد اسکی 2 تا کاراکتر به معنای 1 حرف از فارسی بشه. (کدا فرق میکنه مثلا کد 01587 برابر حرف س )
حالا اینکه دقیقا داستان چیه از وقتی جناب just4froum این موضوع رو مطرح کردند رفته تو مخم و دنبالشم....:عصبانی++:

just4froum
سه شنبه 09 خرداد 1391, 11:11 صبح
ببینید شما وقتی که می خواین یه فایل text رو ذخیره کنید به 4 روش می تونید این کارو بکنید.

اولیش که ascii هست و در این صورت اگر فایل متنی شما شامل متن فارسی باشه به صورت ? نشون داده میشه مگر این که system location کامپیوترتون persian یا farsi باشه.
که ذخیره در این جور فایل ها به صورت عادی و با کد ascii صورت میگیره. یعنی اگر یه فایل متنی که با حالت ascii ذخیره شده را به صورت باینری باز کنید و بایت هاشو ببینید میبینید برای هر کارکتر کد اسکیش ذخیره شده.

بعدیش Unicode که توی این اگر هم فارسی بنویسید و system location کامپیوتری فارسی نباشه بازم به درستی نشون میده.
در یونیکد بدین صورت است که دو بایت اول نشان دهنده ی این است که فایل به صورت یونیکد ذخیره شده. بایت اول 255 و بایت دوم 254 و هر کارکتر 2 بایت رو میگیره یعنی مثلا کارکتر "و" میشه دو بایت 72 6. که 6 هم نشانه ی زبان فارسی هست.
برای خوندنش هم باید از تابع inputb استفاده کنید

حالا utf - 8 هم همینجور است فکر کنم 3 بایت اولش نشان دهنده ی این نوع تایپ است.
می خوام ببینم چجوری میشه خوندش یا ذخیرش کرد.

آخه من یه برنامه ی SRT Editor نوشتم. اون موقع که می نوشتم فکر می کردم همه زیر نویس ها یونیکد باشن آخه اونایی رو که من دیده بودم اینجوری بود بعدا فهمیدم که اشتباه می کردم.

Veteran
سه شنبه 09 خرداد 1391, 12:01 عصر
کد پست شماره 4 نتونست بهتون کمک کنه ؟

just4froum
سه شنبه 09 خرداد 1391, 12:23 عصر
کد پست شماره 4 نتونست بهتون کمک کنه ؟

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

ولی حالا مشکل من خوندنش نه ذخیره کردنش.

arenaw
سه شنبه 09 خرداد 1391, 13:57 عصر
واسه خوندنش اینو فهمیدم که هر چند تا بایت از فایل نشون دهنده یه کاراکتره؟ (به جز 3 تای اولی که همیشه ثابته)
[/URL]http://fa.wikipedia.org/wiki/%DB%8C%D9%88%D9%86%DB%8C%E2%80%8C%DA%A9%D8%AF
[URL]http://en.wikipedia.org/wiki/UTF-8 (http://www.fileformat.info/info/unicode/utf8.htm)

توی خود vb هم ascW واسه نشون دهنده character code اون چیزی که بهش میدیم و ChrW هم بر عکسش.

arenaw
سه شنبه 09 خرداد 1391, 17:59 عصر
Enum FileType
iUnicode& = 2
iUTF8& = 3
iAutodetect& = 0
End Enum
Const adSaveCreateOverWrite = 2
Const ForReading = 1


این واسه خوندن فایل :

Function ReadFile(sFile)
Dim sPrefix
With CreateObject("Scripting.FileSystemObject")
sPrefix = .OpenTextFile(sFile, ForReading, False, False).Read(3)
End With
If Left(sPrefix, 3) <> Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then
With CreateObject("Scripting.FileSystemObject")
ReadFile = .OpenTextFile(sFile, ForReading, False, Left(sPrefix, 2) = Chr(&HFF) & Chr(&HFE)).ReadAll()
End With
Else
With CreateObject("ADODB.Stream")
.Open
If Left(sPrefix, 2) = Chr(&HFF) & Chr(&HFE) Then
.Charset = "Unicode"
ElseIf Left(sPrefix, 3) = Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then
.Charset = "UTF-8"
Else
.Charset = "_autodetect"
End If
.LoadFromFile sFile
ReadFile = .ReadText
End With
End If
End Function


اینم واسه نوشتن:

Private Function WriteFile(sFile, sText, lType As FileType)
With CreateObject("ADODB.Stream")
.Open
If lType = 2 Then
.Charset = "Unicode"
ElseIf lType = 3 Then
.Charset = "UTF-8"
Else
.Charset = "_autodetect"
End If
.WriteText sText
.SaveToFile sFile, adSaveCreateOverWrite
End With
End Function


فک کنم کارت راه بیفته با این
ولی بد رفته تو مخم که خودم بتونم بنویسم و بخونم :گریه:

just4froum
چهارشنبه 10 خرداد 1391, 04:09 صبح
خیلی ممنون جناب arenaw خیلی بهش نیاز داشتم.



ولی بد رفته تو مخم که خودم بتونم بنویسم و بخونم :گریه:


من دارم روش کار می کنم اگه به جایی رسیدم حتما همینجا می گذارم.

arenaw
چهارشنبه 10 خرداد 1391, 11:05 صبح
ممنــــون، من تا حالا فعلا یه چیزایی پیدا کردم اگه خواستی میذارم:
کپی پیست کردن حروف utf-8 تو کلیپ برد
نمایش متن utf-8 روی کپشن، فریم، کپشن فرم و کلا اونایی که از کنترل های خود ویندوز هست (مثلا لیبل نیست...)
یکapi مسیج باکس که توش utf-8رو نشون میده ( واسه خود ویبی ؟ نشون میده)
نمایش متن روی فرم، پیکچر باکس و ... (با اون بالایی داستانش فرق داره)