迭代InternetReadFile下载流中断多字节字符串

时间:2019-04-02 05:44:37

标签: c++ metatrader4

我试图在我的MetaTrader 4应用程序中从服务器检索格式为plain/text的字符串。尽管我在这里说的是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大于响应,此代码就可以正常工作,但是当它较小时,有时会在中间切出多字节字符,从而得到如下所示的字符串:

✓✓✓✓✓??✓?✓✓✓✓

而不是预期的:

✓✓✓✓✓✓✓✓✓✓✓✓

0 个答案:

没有答案