我试图在我的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
大于响应,此代码就可以正常工作,但是当它较小时,有时会在中间切出多字节字符,从而得到如下所示的字符串:
✓✓✓✓✓??✓?✓✓✓✓
而不是预期的:
✓✓✓✓✓✓✓✓✓✓✓✓