Добрый день, возникла необходимость парсинга огромного количества файлов. При разработке макроса под это дело возникла проблема с перкодировкой полученных данных. Имеем такой макрос: [vba]
При выполнении подключения приходят файлы в кодировке, которая не читается. Как пример выдержка из полученных данных: "РўРёРї: Шариковая ручка". Данные на самом сайте используют кодировку windows-1251. Мне необходимо перекинуть их в UTF-8.
Либо я плохо искал, либо не понимаю, как вставить несколько строчек в этот код.
Добрый день, возникла необходимость парсинга огромного количества файлов. При разработке макроса под это дело возникла проблема с перкодировкой полученных данных. Имеем такой макрос: [vba]
При выполнении подключения приходят файлы в кодировке, которая не читается. Как пример выдержка из полученных данных: "РўРёРї: Шариковая ручка". Данные на самом сайте используют кодировку windows-1251. Мне необходимо перекинуть их в UTF-8.
Либо я плохо искал, либо не понимаю, как вставить несколько строчек в этот код.Lolopotamus
Использовать VBA для парсинга сайтов - извращение еще то.. Лучше взять бесплатный хостинг и спарсить php скриптом (используя cron для нон-стоп парсинга) в mysql (я использую библиотеку simple_html_dom.php, хотя regexp должны быть быстрее). А потом просто выгрузить куда нужно контент.
Использовать VBA для парсинга сайтов - извращение еще то.. Лучше взять бесплатный хостинг и спарсить php скриптом (используя cron для нон-стоп парсинга) в mysql (я использую библиотеку simple_html_dom.php, хотя regexp должны быть быстрее). А потом просто выгрузить куда нужно контент.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Среда, 05.02.2014, 12:32
Я понимаю, все возможные варианты парсинга через php. Но в данном случае мне интересна функция которая позволяет осуществлять перекодировку полученных данных. Если таковая есть.
Я понимаю, все возможные варианты парсинга через php. Но в данном случае мне интересна функция которая позволяет осуществлять перекодировку полученных данных. Если таковая есть.Lolopotamus
А есть ли вообще по парсингу на VBA какая-то литература?
А есть ли инструкции по вышиванию экскаватором?
Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение. А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")
А есть ли вообще по парсингу на VBA какая-то литература?
А есть ли инструкции по вышиванию экскаватором?
Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение. А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")SkyPro
Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение. А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")
В гугле я был, не дурак. Поэтому и обратился за советом сюда. Ну а по поводу экскаватора так скажу. Иной раз в структуре какого-нибудь учебника есть интересующая тебя тема, а вот так, в чистом виде в Интернете её не найдёшь. Может кто и сталкивался. Мне же нужно подгружать данные в Excel с сайта (котировки финансовых инструментов), но параметрический запрос сделать не получается, Web разработчик отшлифовал ссылки для удобства поискового паука и там нет инфы ни на инструмент, ни на даты, ни таймфрейм. Что делать? Вот и возник вопрос парсинга и записи макроса.
Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение. А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")
В гугле я был, не дурак. Поэтому и обратился за советом сюда. Ну а по поводу экскаватора так скажу. Иной раз в структуре какого-нибудь учебника есть интересующая тебя тема, а вот так, в чистом виде в Интернете её не найдёшь. Может кто и сталкивался. Мне же нужно подгружать данные в Excel с сайта (котировки финансовых инструментов), но параметрический запрос сделать не получается, Web разработчик отшлифовал ссылки для удобства поискового паука и там нет инфы ни на инструмент, ни на даты, ни таймфрейм. Что делать? Вот и возник вопрос парсинга и записи макроса.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Вторник, 09.09.2014, 06:06
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Вторник, 09.09.2014, 10:06
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (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.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Public Function UTF8ToWin(ByVal inString As String) As String Dim hMemLock1 As Long, hMemLock2 As Long Dim iStrSize As Long, lMaxSize As Long, str1 As String, str2 As String inString = inString & vbNullChar '& vbNullChar lMaxSize = Len(inString) str1 = String$(lMaxSize, 0&) str2 = String$(lMaxSize, 0&) hMemLock1 = StrPtr(str1) hMemLock2 = StrPtr(str2) iStrSize = MultiByteToWideChar(65001, 0&, inString, &HFFFF, hMemLock1, lMaxSize) iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)
If Len(iStrSize) Then UTF8ToWin = StrConv(str2, vbUnicode) End If End Function
Sub QWERT() Debug.Print UTF8ToWin("Тип: Шариковая ручка") End Sub
[/vba]
Не это?
Цитата
"Тип: Шариковая ручка".
=Тип: Шариковая ручка
[vba]
Код
Option Explicit
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (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.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Public Function UTF8ToWin(ByVal inString As String) As String Dim hMemLock1 As Long, hMemLock2 As Long Dim iStrSize As Long, lMaxSize As Long, str1 As String, str2 As String inString = inString & vbNullChar '& vbNullChar lMaxSize = Len(inString) str1 = String$(lMaxSize, 0&) str2 = String$(lMaxSize, 0&) hMemLock1 = StrPtr(str1) hMemLock2 = StrPtr(str2) iStrSize = MultiByteToWideChar(65001, 0&, inString, &HFFFF, hMemLock1, lMaxSize) iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)
If Len(iStrSize) Then UTF8ToWin = StrConv(str2, vbUnicode) End If End Function
Sub QWERT() Debug.Print UTF8ToWin("Тип: Шариковая ручка") End Sub