Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Абракадабра в скаченных страницах


Автор: I_Am_Rock 29.12.2008, 19:22
Извините, если название темы не отражает суть - не смог выдумать название лучше...

Вобщем, проблема - скачиваю страницу (конкретно - страницу Яндекса) с помощью АПИ-функции URLDownloadToFile. Когда потом скаченную страницу открываю и заливаю в текстбокс, то вместо русских символов пишется абракадабра (напр., вместо "привет" - "РїСЂРёРІРµС").

В чем проблема и главное - как ее решить?

Буду очень благодарен!

Автор: Akina 29.12.2008, 21:51
Цитата(I_Am_Rock @  29.12.2008,  20:22 Найти цитируемый пост)
В чем проблема 

В кодировке. Смотрите заголовок страницы - там явно указана кодировка charset=UTF-8. А вы ее интерпретируете как CP-1251. Понятно, что получается ерунда.

Цитата(I_Am_Rock @  29.12.2008,  20:22 Найти цитируемый пост)
как ее решить

Соответственно перекодировать.

Автор: I_Am_Rock 29.12.2008, 22:19
Цитата(Akina @  29.12.2008,  21:51 Найти цитируемый пост)
Соответственно перекодировать.

Ну, я в принципе так и думал - что в этом проблема.
Но StrConv - функция которая вроде как для этого... пробовал не получается. :( Или я не там ищу?

/ На одном сайте прочел что для этого нужно использовать MultiByteToWideChar и WideCharToMultiByte, это так?

Автор: I_Am_Rock 29.12.2008, 22:40
Нашел ответ... Если кому понадобится - пользуйтесь на здоровье.

Akina
Спасибо за подсказку.  smile 

Код

Public Enum CHARSET
  CS_DOS = 866
  CS_Windows = 1251
  CS_ISO = 28595
  CS_KOI8R = 20866
  CS_UTF7 = 65000
  CS_UTF8 = 65001
End Enum

Public Function ConvertCharset(ByVal strString As String, ByVal FromCharset As CHARSET, ByVal ToCharset As CHARSET) As String
  Dim lngLength As Long
  Dim strWideChar As String
  Dim strReturn As String
  Dim lngReturnLength As Long
  Dim dwFlags As Long
   
  If FromCharset = CS_UTF7 Or FromCharset = CS_UTF8 Then
    dwFlags = 0
  Else
    dwFlags = MB_PRECOMPOSED
  End If
   
  lngLength = Len(strString)
  strWideChar = String$(lngLength * 2, Chr$(0))
  strReturn = String$(lngLength * 2, Chr$(0))
  lngReturnLength = MultiByteToWideChar(FromCharset, dwFlags, strString, lngLength, strWideChar, lngLength)
  WideCharToMultiByte ToCharset, 0, strWideChar, lngReturnLength, strReturn, lngLength * 2, ByVal 0, 0
  ConvertCharset = Left$(strReturn, lngReturnLength)
End Function

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)