ReadFields не чете кирилица на някои компютри
Имам следния проблем:
Едно програмче на VB 2005 трябва да чете данни от файл. Направил съм го по следния начин:
Код:
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(txtFileName.Text)
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
MyReader.SetFieldWidths(nmrBegin.Value, nmrLength.Value, -1)
Dim currentRow As String()
While Not MyReader.EndOfData
currentRow = MyReader.ReadFields() // Ето тук е проблемът!!!
End While
End Using
Файлът съдържа както латиница и цифри, така и ДОС кирилица и е с фиксирани по дължина полета.
На някои компютри кирилицата се чете (визуализира се като квадратчета, но се прочита), а на други все едно въобще не съществува във файла и се получава изместване на полетата.
Опитах да му наложа експлицитно култура "bg-BG", но не помогна.
На двата компютъра (такъв, който чете кирилицата и такъв, който я пропуска) регионалните настройки в контрол панела са абсолютно еднакви. И на двете места е инсталиран .NET 2.0
Някой има ли някакви идеи?
Re:ReadFields не чете кирилица на някои компютри
Опитай се да конвертираш DOS кирилицата във Unicode.
Мисля, че кодовата таблица за кирилицата под DOS беше 866.
Мисля,че трябва да използваш Encoding.GetEncoding.
Виж това:
Код:
Imports System.Text
Dim cyrillic As Encoding = Encoding.GetEncoding(866)
Given an array of Bytes with DOS Cyrillic in it, you would use
Encoding.GetString to convert to a Unicode String.
Dim bytes() As Byte
Dim s As String = cyrillic.GetString(bytes)
Given a Unicode String, you would us Encoding.GetBytes to get an array of
Bytes with DOS cyrillic.
bytes = cyrillic.GetBytes(s)
If your DOS cyrillic is in a Text File you pass the Encoding object to your
System.IO reader & writer classes
Dim input As New StreamReader("myCyrillic.txt", cyrillic)
Dim output As New StreamWriter("myCyrillic.txt", False, cyrillic)
За повече информация погледни тук
http://www.yoda.arachsys.com/csharp/unicode.html
Re:ReadFields не чете кирилица на някои компютри
:ole :Drinks:
Това му бил проблемът!
А защо без зададен енкодинг на едни машини работи, а на други не? Microsoft-ска работа :2guns: