VB .NET 2005 и чтение русских букв из файла

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ufobject
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 23.11.2006 (Чт) 16:42

VB .NET 2005 и чтение русских букв из файла

Сообщение ufobject » 23.11.2006 (Чт) 17:38

Привет народ! У меня такая проблема: все время кодил на VB6. Тут пришлось перелезть на VB.NET 2005. Все вроде ровно, но вот незадача.. столкнулся со странной проблемой, которую я до этого не встречал нигде. Читаю текстовый файл следующим кодом:

Dim folder, file, currentLine As String

FolderDialog1.ShowDialog()
folder = FolderDialog1.SelectedPath
file = folder + "\citys.txt"
Dim myReader As New System.IO.StreamReader(file)
Do While myReader.Peek <> -1
currentLine = myReader.ReadLine()
MessageBox.Show(currentLine)
Loop

в итоге при работе этого кода весь файл вроде как читается нормально, НО если в нем нет русских букв! Русские буквы просто как бы "вырезаются" из прочитанной строки как будто их там и небыло. Чую что то тут с кодировкой связано, но объясните мне кто-нибудь, как это изличить и возможно ли "вырезание" еще чего-либо в тексте таким же образом? Я ведь заранее незнаю какой файл юзверь будет читать моей программой...
Заранее спасибо

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 23.11.2006 (Чт) 19:12

этого даже ворд толком не умеет (при открытии левых файлов), а ты хош прям чтоб....
что касается конкретно ЭТОГО файла, то для начала тебе надо его приложить к вопросу
ещё там есть encoding у ридера.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 23.11.2006 (Чт) 23:06

По умолчанию .NET работает с unicode кодировкой (UTF-8), файл, скорее всего, в windows-1251 или windows-1252.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 24.11.2006 (Пт) 8:58

ufobject

С один постом, а даж в поиск не зашёл. Плюсомётчики, фас!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

ufobject
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 23.11.2006 (Чт) 16:42

Сообщение ufobject » 24.11.2006 (Пт) 13:50

ненадо, я заходил в поиск. ничего толкового не нашел.
С кодировкой ясно что что то не то, что нужно 1251, но где мне ее выставит и как?
а файл вообще обычный, текстовый. экспортирован из access

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.11.2006 (Пт) 14:30

Кодировку выставляй в конструкторе потока StreamReader
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.11.2006 (Пт) 14:38

ufobject писал(а):ненадо, я заходил в поиск. ничего толкового не нашел.

Врёт.
http://bbs.vbstreets.ru/viewtopic.php?t ... reamreader
http://bbs.vbstreets.ru/viewtopic.php?t ... reamreader
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ufobject
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 23.11.2006 (Чт) 16:42

Сообщение ufobject » 24.11.2006 (Пт) 15:25

GSerg, благодарю за ссылки. То что нужно.
Пожалуйста не стоит меня обвинять во вранье, я действительно искал, возможно параметры поиска задавал не эффективные, но искал.

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 26.11.2006 (Вс) 20:58

По умолчанию .NET работает с unicode кодировкой (UTF-, файл, скорее всего, в windows-1251 или windows-1252.

по-моему у кого как. у меня MsgBox(System.Text.Encoding.Default.HeaderName) кричит windows-1251
и у меня с дефолтовой всё всегда работает.
интересно только если я принесу свою откомпиленную прогу на твой комп - что тогда она скажет? может попробуем?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.11.2006 (Пн) 9:56

Neco писал(а):
По умолчанию .NET работает с unicode кодировкой (UTF-, файл, скорее всего, в windows-1251 или windows-1252.

по-моему у кого как. у меня MsgBox(System.Text.Encoding.Default.HeaderName) кричит windows-1251
и у меня с дефолтовой всё всегда работает.
интересно только если я принесу свою откомпиленную прогу на твой комп - что тогда она скажет? может попробуем?


Дык, Default есть для системы, а не для FW
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 29.11.2006 (Ср) 11:41

ну на всякий случай функция перекодировки из юникода в 1251
Код: Выделить всё

   Public Function EncodingUTF8toWin1251(ByRef source As String) As String
      Dim code As System.Text.Encoding = System.Text.Encoding.GetEncoding("windows-1251")
      Dim dstByte() As Byte = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("utf-8"), code, code.GetBytes(source))
      Return code.GetString(dstByte)
   End Function
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

    TopList