Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2016, 16:33   #1
Vladcos
Новичок
Джуниор
 
Регистрация: 14.02.2016
Сообщений: 4
По умолчанию Кодировка и WinINET

Доброе время суток! Пожалуйста пролейте свет на следующую проблему: при закачке средствами Wininet страниц, большинство из них читаются в буфер(и соот-но записываются в файл) с "кракозябрами". При попытке их расшифровать на http://www.artlebedev.ru/tools/decoder/ пишет "CP1251 → UTF-8". Чем только не пытался их орусить, но тщетно (локаль, wstring и т.п.), мой уровень довольно низок. Заранее спасибо.

Пример кода:

Код:
#include <stdafx.h>
#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <locale.h>
#pragma comment ( lib, "wininet.lib" )
#include <string> 
#include <fstream>
#include <regex>
#include <algorithm>
#include <wchar.h>

using namespace System;

int main(array<System::String ^> ^args)
{
	char heder[80];
 
char buf[256];
std::wstring wURL = L"http://js-prog.blogspot.ru/2013/03/url-javascript.html";
unsigned long len, offs;
std::wstring wUSER = L"Mozilla/5.0 (Windows NT 5.1)";
HINTERNET session, file,hResource;
session = InternetOpenW(LPCWSTR(wUSER.c_str()),
                        INTERNET_OPEN_TYPE_DIRECT,
                        NULL, NULL, 0);
file = InternetOpenUrlW(session,LPCWSTR(wURL.c_str()), NULL,-1,0,0);
std::string str("");
int count=0;
char * fileName = "C:\\example.txt"; // Путь к файлу для записи
FILE * ffile = fopen(fileName, "w");
do {
   InternetReadFile(file, (LPVOID)buf, sizeof(buf), &len);
   if (len>0) 
   {
	  str.append(buf);
	  fputs(buf, ffile);
      offs += len;
   }}  while (len);
fclose(ffile);

InternetCloseHandle(file);
InternetCloseHandle(session);
  return 0;
}
Vladcos вне форума Ответить с цитированием
Старый 14.02.2016, 21:04   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

В буфер записывается как есть, кракозябры это потом, при чтении.
Вопрос в какой кодировке страничка изначально.
waleri вне форума Ответить с цитированием
Старый 14.02.2016, 23:02   #3
Vladcos
Новичок
Джуниор
 
Регистрация: 14.02.2016
Сообщений: 4
По умолчанию

UTF-8 (например mail.ru)
Vladcos вне форума Ответить с цитированием
Старый 15.02.2016, 15:33   #4
Vladcos
Новичок
Джуниор
 
Регистрация: 14.02.2016
Сообщений: 4
По умолчанию

Весь вопрос вызывает работа с буфером: как его залить в строку и производить с ней действия без изменения кодировки...
Vladcos вне форума Ответить с цитированием
Старый 15.02.2016, 16:24   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

buf и есть строка - манипулируйте как угодно...
str.append(buf) скорее всего сконвертирует данные непонятно как.
Либо конвертируйте правильно, либо не используйте string.

Какова конечная цель?
waleri вне форума Ответить с цитированием
Старый 15.02.2016, 16:59   #6
Vladcos
Новичок
Джуниор
 
Регистрация: 14.02.2016
Сообщений: 4
По умолчанию

В конце-концов я получал код страницы в строке и применял tr1::regex_search для поиска тэгов.. (кстати возник вопрос как сделать поиск c предпросмотром назад в Visual Studio)
Vladcos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
winInet API darkblood0202 C++ Builder 3 04.05.2012 17:29
WinInet GET запрос Pack Работа с сетью в Delphi 1 09.02.2012 13:28
WinInet [CACHE] Win Api 11 28.06.2011 21:52
WinInet vitalik007 Работа с сетью в Delphi 1 14.10.2007 13:09