Я пытаюсь получить строку с сервера, отформатированную в plain/text
, в моем приложении MetaTrader 4.Хотя я говорю здесь MT4, я считаю, что мой вопрос не ограничен его контекстом, так как я импортирую InternetReadFile
из wininet.dll
.
Проблема заключается в том, что когда в ответе присутствуют многобайтовые символы И ответ превышает dwNumberOfBytesToRead
, в процессе итерации потока загрузки может произойти сбой ответа.
Это код, который у меня есть сейчас.Обратите внимание, что есть некоторые функции из языков MQL4, но их названия довольно понятны.
int lReturn[] = {1};
string sBuffer = "";
uchar arrReceive[];
ArrayResize(arrReceive, BUFSIZ + 1);
strWebPage = "";
int i = 0;
while (TRUE) {
if (InternetReadFile(hReq, arrReceive, BUFFER_SIZE, lReturn) <= 0 || lReturn[0] == 0) {
break;
}
string strThisRead = CharArrayToString(arrReceive, 0, lReturn[0], CP_UTF8);
strWebPage = StringConcatenate(strWebPage, strThisRead);
}
Этот код работает хорошо, если BUFFER_SIZE
больше, чем ответ, но когда он меньшеиногда многобайтовые символы «обрезаются посередине», что приводит к появлению такой строки:
✓✓✓✓✓??✓?✓✓✓✓
вместо ожидаемого:
✓✓✓✓✓✓✓✓✓✓✓✓