-
> UTF8 использовал из-а того, что тело запроса должно быть > в этой кодировке. Да и мало ли как объявят в следующей версии > Delphi этот строковый тип
А объявят, точнее уже объявили, UTF8String и не просто объявили, но и поддержку сделали.
-
> Maksim V. © (17.07.11 01:50) [19]
> UTF8 использовал из-а того, что тело запроса должно быть > в этой кодировке.
Хорошо, пусть так, но смотри что получается у тебя:
> lstrlen(LPTSTR(pszSoap))
pszSoap содержать может теоретически как однобайтовые символы так и двухбайтовые, в двухбайтовых не исключено, что один из байтов окажется нулем, что вычислит в этом случае lstrlen ? Неправильно она вычислит. Как дальше пойдет работа программы можно только гадать.
-
while( InternetQueryDataAvailable(hResourceHandle, dwBytesToWrite, 0, 0) )do begin
......
end;
"This function returns the number of bytes of data that are available to be read immediately by a subsequent call to InternetReadFile. If there is currently no data available and the end of the file has not been reached, the request waits until data becomes available. The amount of data remaining will not be recalculated until all available data indicated by the call to InternetQueryDataAvailable is read." > как однобайтовые символы так и двухбайтовые, в двухбайтовых > не исключено, что один из байтов окажется нулем
- в UTF8 - к многобайтовой последовательности(и только к ней) относятся только октеты с установленным старшим битом... То есть символ #0 - всегда однобайтовый и терминирующий... а вот это > Result := Result + Utf8ToAnsi(pszText);
- криминал, так как если кусок pszText начинается с середины многабайтового символа, или заканчивается незавершенной последовательностью - будет ой...
-
> han_malign (20.07.11 09:34) [22]
> - в UTF8 - к многобайтовой последовательности(и только к > ней) относятся только октеты с установленным старшим битом. > .. То есть символ #0 - всегда однобайтовый и терминирующий. > ..
Да, все верно, я уже после как написал, понял, что ноль в средине не встретится именно в UTF8. Но все равно, считаю, что неправильно применять lstrlen такой строке. Неправильно она вычислит длину строки в символах, если там будут двухбайтовые символы. Пока там однобайтовые символы - все работает, но до поры.
-
> Maksim V. © (16.07.11 17:54) [8]
> Плохиш > Опять же ворох всл барахла.
Меня прикалывают психически неуравновешенные изобретатели велосипедов. Они постоянно пытаются присобачить квадратные колёса.
-
> han_malign (20.07.11 09:34) [22] > DVM © (20.07.11 22:16) [23]
Поменял lstrlen на Length, теперь размер содержимого и размер строки совпадает. Так все-таки как цикл закачки составить? Сделать по аналогии как у Rouse_ с двумя массивами, расширяя один из них и копируя в него и под конец накопленные байты перевести в строку? Ну или выделять память под Pointer и через lstrcat докопировать или как вообще, я запутался...
> Плохиш © (21.07.11 00:09) [24]
По делу есть что сказать?
-
> Maksim V. © (22.07.11 01:51) [25] > > > Плохиш © (21.07.11 00:09) [24] > > По делу есть что сказать? >
Смотри [7].
-
> Maksim V. © (22.07.11 01:51) [25]
> Поменял lstrlen на Length, теперь размер содержимого и размер > строки совпадает.
Я не уверен, что Length для UTF8 возвратит количество символов в строке.
> Так все-таки как цикл закачки составить? Сделать по аналогии > как у Rouse_ с двумя массивами, расширяя один из них и копируя > в него и под конец накопленные байты перевести в строку? >
да
> Ну или выделять память под Pointer и через lstrcat докопировать > или как вообще, я запутался...
нет
-
Удалено модератором
|