Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Работа с текстовым файлом в vb Добавлено: 16.11.09 16:16  

Автор вопроса:  Nord
поиска на форуме нету?
нужно открыть utf-8 файл для чтения записи и добавить в определенные места строки. помогите пожалуйста не могу чего то сообразить. можно открыть и через fso и через open но ни как могу найти как сделать навигацию по файлу. и как писать в Utf-8 файл русские слова. он пишет по ходу в win кодировке.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 16.11.09 17:41
Ну конечно он пишет в win-кодировке
Сначала нужно понять как устроен utf8 (http://ru.wikipedia.org/wiki/UTF-8) а потмо уже писать в файл

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 16.11.09 18:02
Вообще вот преобразование UTF-16 (тип String как раз и является 2байтным уникодом) в UTF-8 и наоборот:
  1. Private Function toUTF8(ByVal str As String) As String
  2.     Dim ConvString As String, BufLen As Long, StrBuffer() As Byte
  3.     BufLen = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(str), _
  4.                 Len(str), ByVal 0&, 0&, ByVal 0&, ByVal 0&)
  5.     If (BufLen) Then
  6.         ReDim StrBuffer(0 To BufLen - 1) As Byte
  7.         Call WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(str), _
  8.                 Len(str), StrBuffer(0), BufLen, ByVal 0&, ByVal 0&)
  9.         toUTF8 = StrConv(StrBuffer(), vbUnicode)
  10.     End If
  11. End Function
  12.  
  13. 'Conversion UTF-8 -> UTF-16
  14. Public Function dec_UTF8(ByVal str As String) As String
  15.     Dim stBuffer As String, cwch As Long, dat() As Byte
  16.     dat = StrConv(str, vbFromUnicode)
  17.     ReDim Preserve dat(UBound(dat) + 1)
  18.     cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, 0&, 0&)
  19.     stBuffer = String$(cwch + 1, vbNullChar)
  20.     cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, StrPtr(stBuffer), Len(stBuffer))
  21.     dec_UTF8 = Left$(stBuffer, cwch - 1)
  22. End Function

Надо только объявления констант и апи сделать

Ответить

Номер ответа: 3
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #3 Добавлено: 19.11.09 10:47
из utf в win работает обратно нет. BufLen всегда получает значение 0. Это уже третий пример который смотрю и во всех получаю 0... что не так?


Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long


Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
        ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long


Const CP_UTF8 = 65001
Const CP_WIN = 1251

Private Sub Command1_Click()
Dim s As String
Dim s2 As String

s="qwerty"
s2 = toUTF8(ByVal s)

end sub

Ответить

Номер ответа: 4
Автор ответа:
 ZaEzzz



ICQ: 777 

Вопросов: 0
Ответов: 1
 Web-сайт: close.ru
 Профиль | | #4
Добавлено: 07.06.10 08:48
Чувак, задним местом чувствую что-то ты не так делаешь... Я просто не спалил где ты используешь MultiByteToWideChar? Вызов вижу, а использование нет...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам