Delphi 2009 - Неявные предупреждения преобразования строки в RawByteString - PullRequest
0 голосов
/ 12 июля 2009

Я только что получил в свои руки D2009 и использую его с одним из наших существующих проектов - все это прекрасно компилируется, однако я только что подобрал DIRegEx для использования некоторого регулярного выражения в проекте.

Однако он всегда выдает предупреждения о String в RawByteString и наоборот. Например,

var
  Response : string;
begin
  Response := idHTTP.Get('http://www.somesite.com');
  DIRegEx.SetSubjectStr(Response);
  ......

Теперь параметр SetSubjectStr имеет тип RawByteString, а ответ от idHTTP.Get - просто строка. Кажется странным, что я бы тоже сделал

DIRegEx.SetSubjectStr(utf8string(Response));

или

var
  Response : Utf8String;
begin
  Response := Utf8String(idHTTP.Get......);

Что я должен делать здесь.

Ответы [ 2 ]

2 голосов
/ 14 июля 2009

Поскольку DIRegEx явно не принимает ввод Unicode, у вас нет другого выбора, кроме как выполнить какое-либо преобразование данных из того, что вы загружаете онлайн, в то, что вы передаете в DIRegEx. TIdHTTP уже выполняет свои собственные преобразования внутренне из исходной кодировки данных (как указано сервером) в Unicode перед передачей окончательных данных вам. Если вы хотите работать с необработанными байтами, которые отправляет сервер, без применения к нему внутренних интерпретаций TIdHTTP, вам придется передать TMemoryStream в TIdHTTP, чтобы получить необработанный вывод, а затем делать с ним все, что вам нужно.

0 голосов
/ 12 июля 2009
...