PDA

View Full Version : مشکل خوندن متن فارسی از فایل



Ner'zhul Arthas
سه شنبه 24 بهمن 1385, 22:46 عصر
وقتی در وی بی دات نت یه فایل مثلا تکست رو میخونم تمام حروف فارسیش نیست میشه.
حروف فارسی رو از از متن خونده شده پاک میکنه.

مشکل چیه و چیکار کنم؟

vahidiran
چهارشنبه 25 بهمن 1385, 10:49 صبح
اگه با خود Vb.net فارسی داخلش بنویسی براش مشکلی پیش نمیاد

Ner'zhul Arthas
چهارشنبه 25 بهمن 1385, 17:10 عصر
داخل فایله یا داخل برنامه؟

راه دیگه ای هم نداره برای خوندن؟

Ner'zhul Arthas
پنج شنبه 03 اسفند 1385, 19:32 عصر
یه روش پیدا کردم.

فایل تکست رو به جای
ANSI
Unicode
ذخیره کنیم درست میشه.
ولی حجمش میشه دو برابر.

راه دیگه ای نیست؟

ghafoori
پنج شنبه 03 اسفند 1385, 20:42 عصر
دوست عزیز از کلاسهایه فضای text استفاده کردی
در این نیم اسپیس توابعی برای تبدیل از asni به unicode است مثلا کد زیر


Dim s As String
System.Text.ASCIIEncoding.Convert(System.Text.Enco ding.ASCII, System.Text.Encoding.BigEndianUnicode, b)
Dim d As System.Text.UTF8Encoding
s = d.GetString(b)


b ارایه ای از بایت است که از فایل می خوانی
البته خودم نمی دانم این کد به کار شما می اید یا نه خودم امتحان نکردم

Ner'zhul Arthas
جمعه 04 اسفند 1385, 01:33 صبح
مرسی حل شد.

شکل درست استفادش اینجوریه:



Dim b() As Byte = System.IO.File.ReadAllBytes("adresefile.txt")
Dim d As New System.Text.UnicodeEncoding
b = System.Text.UnicodeEncoding.Convert(System.Text.En coding.Default, System.Text.Encoding.Unicode, b)
Textbox1.Text = d.GetString(b)

Ner'zhul Arthas
دوشنبه 13 فروردین 1386, 17:28 عصر
شکل درست ترش هم اینجوریه:


Textbox1.text = System.IO.File.ReadAllText("...\file.txt", System.Text.Encoding.Default)

sanjar.ir
یک شنبه 29 تیر 1393, 13:23 عصر
سلام
اگر فایل را خط به خط بخواهیم بخوانیم چطور این مشکل را باید حل کنیم.
چون برنامه ای که من نوشتم متن را خط به خط پردازش می کند. اگر بخواهم یکجا فایل را بخوانم تقریباً باید سورسش را از اول بنویسم و خیلی کار می برد.
من از LineInput و PrintLine استفاده می کنم.
البته عمده مسأله من هنگام ذخیره است. می خواهم به دلخواه ansi یا یونیکد یا یونیکد UTF-8 ذخیره کنم، بدون این که از نوت پد استفاده شود خود برنامه این کار را بکند.
اگر تابع یا کدی برای تبدیل String با یک Encoding به یک Encoding دیگر سراغ دارید لطفاً راهنمایی کنید.

sanjar.ir
جمعه 03 مرداد 1393, 00:41 صبح
اگر تابع یا کدی برای تبدیل String با یک Encoding به یک Encoding دیگر سراغ دارید لطفاً راهنمایی کنید.

من یک تابع نوشتم که رشته را به انسی تبدیل می کند و یک تابع نوشتم که رشته را به یونیکد تبدیل می کند.
اما عیبش این است که به جای رم از هارد یا ... استفاده می کند و این باعث کاهش سرعت می شود، اگر کسی می تواند راهنمایی کند تا این عیب بر طرف شود.


Function یونیکد2اسکی(ByVal یسطرمتن As String) As String
Dim محتوافایل() As String = {یسطرمتن}
Dim آدرس_فایل_موقت, متن_موقت As String
Dim ff, ط As Integer
ff = FreeFile()
آدرس_فایل_موقت = "stringtemp.tmp"
'نوشتن با کدبندی پیشفرض
FileOpen(ff, آدرس_فایل_موقت, OpenMode.Output, OpenAccess.Write, OpenShare.LockReadWrite)
PrintLine(ff, یسطرمتن)
FileClose(ff)
'خواندن به عنوان یونیکد
محتوافایل = IO.File.ReadAllLines(آدرس_فایل_موقت, System.Text.Encoding.UTF8)
یونیکد2اسکی = محتوافایل(0)
'
'حذف بدون بازگشت
FileOpen(ff, آدرس_فایل_موقت, OpenMode.Binary, OpenAccess.Write, OpenShare.LockReadWrite)
متن_موقت = "" : ط = یسطرمتن.Length
For ح = 0 To ط
متن_موقت += "........"
Next
FilePut(ff, متن_موقت)
FileClose(ff)
Kill(آدرس_فایل_موقت)
End Function
Function اسکی2یونیکد(ByVal یسطرمتن As String) As String
Dim محتوافایل() As String = {یسطرمتن}
Dim آدرس_فایل_موقت, متن_موقت As String
Dim ff, ط As Integer
ff = FreeFile()
آدرس_فایل_موقت = "stringtemp.tmp"
'نوشتن با کدبندی پیشفرض
FileOpen(ff, آدرس_فایل_موقت, OpenMode.Output, OpenAccess.Write, OpenShare.LockReadWrite)
PrintLine(ff, یسطرمتن)
FileClose(ff)
'خواندن به عنوان اسکی
محتوافایل = IO.File.ReadAllLines(آدرس_فایل_موقت, System.Text.Encoding.ASCII)
اسکی2یونیکد = محتوافایل(0)
'
'حذف بدون بازگشت
FileOpen(ff, آدرس_فایل_موقت, OpenMode.Binary, OpenAccess.Write, OpenShare.LockReadWrite)
متن_موقت = "" : ط = یسطرمتن.Length
For ح = 0 To ط
متن_موقت += "........"
Next
FilePut(ff, متن_موقت)
FileClose(ff)
Kill(آدرس_فایل_موقت)
End Function

a_mohammadi_m
جمعه 24 مرداد 1393, 03:09 صبح
سلام
در این مثال یک فایل متنی فارسی تحت Dos با کد پیج ایران سیستم تبدیل به یک DataTable با کد پیج Unicode می شود
در طراحی فرم از یک Boton ، یک Textbox ، یک OpenFileDialog و یک DataGrid استفاده شده
متن Textbox برای تعیین کاراکتر جدا کننده فیلدهای اطلاعاتی در نظر گرفته شده ( مثلا , یا ; یا | یا هر کاراکتر مجاز دیگه مثل فاصله خالی که باید قبل از کلیک روی دکمه تعیین شده باشه )





Imports System.IO
Imports System.Text
Imports System.Data.OleDb
Imports IranSystemConvertor

Public Class frmGetCSV_Data


Private Sub btnSelectFile_Click(sender As Object, e As EventArgs) Handles btnSelectFile.Click

Try
OpenFileDialog1.ShowDialog()
grdData.DataSource = GetCsvData(OpenFileDialog1.FileName, txtSeprator.Text)

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub
Public Function GetCsvData(ByVal strFileName As String, ByVal strSeprator As String) As DataTable

Dim dt As New DataTable()
Dim line As String = Nothing

Dim i As Integer = 0

Try
Using sr As StreamReader = New StreamReader(strFileName, System.Text.Encoding.GetEncoding(1256))
line = sr.ReadLine()
Do While line IsNot Nothing

Dim data() As String = line.Split(strSeprator)
Dim DataUnicode(data.GetUpperBound(0)) As String

For j = data.GetLowerBound(0) To data.GetUpperBound(0)
DataUnicode(j) = ConvertTo.Unicode(data(j))
Next
If DataUnicode.Length > 0 Then
If i = 0 Then
For Each item In DataUnicode
dt.Columns.Add(New DataColumn())
Next item
i += 1
End If
Dim row As DataRow = dt.NewRow()
row.ItemArray = DataUnicode
dt.Rows.Add(row)
End If
line = sr.ReadLine()

Loop
End Using

Return dt
Catch ex As Exception
Return Nothing
End Try
End Function

End Class



در ضمن DLL مبدل نیز ضمیمه شد