PDA

View Full Version : اشکال در باز کردن فایل متنی (txt.)



asghar2008
یک شنبه 17 دی 1391, 22:55 عصر
سلام


دوستان میخوام یه فایل متنی که توسط Notpad ویندوز ایجاد شده و داخل آن نوشته فارسی است توسط برنامه خودم باز کنم.

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


Dim strread As New System.IO.StreamReader(ofd.FileName, System.Text.Encoding.UTF8)
matn = strread.ReadToEnd
strread.Close()
textmatn.Text = matn




ولی وقتی فایل txt. رو باز میکنم. نوشته ها به صورت علامت سوال هست.البته حروف انگلیسی درست نشون داده میشن و فقط حروف فارسی دچار مشکل میشن.

gilsoft
یک شنبه 17 دی 1391, 23:45 عصر
سلام دوست عزیز

فایل txt. رو یکبا در Notepad باز کن و طبق عکس زیر عمل کن (Save AS بصورت UTF-8 ) :

97983

احتمالا مشکل تون حل میشه

موفق باشید

asghar2008
دوشنبه 18 دی 1391, 00:18 صبح
ممنون دوست عزیز

مشکل حل شد . حالا نمیشه با کد نویسی این جور فایل هارو باز کرد؟

چون ممکنه کاربری اصلا به رمزنگاری (Encoding) توجه نکنه.

gilsoft
دوشنبه 18 دی 1391, 00:55 صبح
یکی از روشها مثل کد زیر هستش :
Dim fs As New FileStream("c:\a.txt", FileMode.Create, FileAccess.ReadWrite)
Dim SW As New StreamWriter(fs, System.Text.Encoding.UTF8)
SW.WriteLine()
SW.Close()

و اما روش دوم :
Dim FileName As String = "c:\a.txt"
RichTextBox1.Text = System.IO.File.ReadAllText(FileName, System.Text.Encoding.ASCII)
System.IO.File.WriteAllText(FileName, RichTextBox1.Text, System.Text.Encoding.UTF8)

حتما Test کنید ...

gilsoft
دوشنبه 18 دی 1391, 00:55 صبح
این تابع هم برای چک کردن یک فایل UTF8 استفاده میشه .. که اگه فایل Unicode باشه True و در غیر اینصورت False رو برمی گردونه
Private Function IsUnicodeFile(ByVal FileName As String) As Boolean
IsUnicodeFile = False
Dim fs As System.IO.FileStream = New System.IO.FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
If fs.CanSeek Then
Dim BOF As Byte() = New Byte(3) {}
fs.Read(BOF, 0, 4)
If (BOF(0) = &HEF AndAlso BOF(1) = &HBB AndAlso BOF(2) = &HBF) OrElse _
(BOF(0) = &HFF AndAlso BOF(1) = &HFE) OrElse _
(BOF(0) = &HFE AndAlso BOF(1) = &HFF) OrElse _
(BOF(0) = 0 AndAlso BOF(1) = 0 AndAlso BOF(2) = &HFE AndAlso BOF(3) = &HFF) Then

IsUnicodeFile = True
Else
IsUnicodeFile = False
End If
fs.Seek(0, System.IO.SeekOrigin.Begin)
Else
IsUnicodeFile = False
End If
fs.Close() : fs.Dispose()
Return (IsUnicodeFile)
End Function

موفق باشید