第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Delphi Indy 后編碼和 PHP

Delphi Indy 后編碼和 PHP

PHP
哈士奇WWW 2021-06-15 15:11:55
從 php 腳本返回的字符串被編碼。我在 delphi 2007 和 Indy 10.6 中針對(duì) php 腳本的 http 帖子有問題。php 腳本包含: header ("Content-Type: application / json; charset = UTF-8"); 德爾福部分是這樣的:  data: = TStringList.Create;  dati.Values ['id']: = '6';  dati.Values ['name']: = 'àèìòù';  lParams: = TIdMultiPartFormDataStream.Create;  cont: = 0;  try    try      url: = 'someurl';      while cont <= data.Count-1 do      begin        lParams.AddFormField (data.Names [cont], data.Values [data.Names [cont]]);        Inc (cont);      end;      Response: = IdHTTP1.Post (url, lParams);    except      on E: Exception do      Response: = E.ClassName + ':' + E.Message;    end;  finally    lParams.Free;    IdHTTP1.Disconnect;  end;  Result: = Response;響應(yīng)包含應(yīng)保存在 mysql 數(shù)據(jù)庫(kù)中的內(nèi)容,其 varchar 字段在字段和 php 回顯中都聲明為 utf8-general-i,但是,它們返回:= E0 = E8 = EC = F2 = F9我嘗試使用 UTF8Encode (dati.Values [data.Names [cont]]) 進(jìn)行編碼,我嘗試將 UTF-8 字符集傳遞給 AddFormField,但從未返回字符串 àèìòù。我究竟做錯(cuò)了什么?
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

你所展示的看起來(lái)像 MIME 的quoted-printable編碼,其中非 ASCII/保留字節(jié)八位字節(jié)以=HH十六進(jìn)制格式編碼。TIdMultiPartFormDataStream默認(rèn)情況下,會(huì)以帶引號(hào)的可打印格式對(duì)文本字段進(jìn)行編碼。=E0=E8=EC=F2=F9是字節(jié)序列的 QP 編碼形式$E0 $E8 $EC $F2 $F9,它是以'àèìòù'Latin-1 (ISO-8859-1) 字符集編碼的文本。

PHP 不支持提交中的Content-Transfer-Encoding標(biāo)頭multipart/form-data請(qǐng)參閱此),因此它不會(huì)自動(dòng)為您解碼 QP 編碼。因此,您必須:

  • 在 PHP 腳本代碼中手動(dòng)解碼 QP 編碼。

  • TIdMultipartFormDataStream通過將TIdFormDataField.ContentTransfer屬性設(shè)置為'8bit'而不是默認(rèn)值來(lái)禁用應(yīng)用 QP 編碼'quoted-printable'(請(qǐng)注意,RFC 7578不贊成Content-Transfer-Encodingmultipart/form-data通過 HTTP 提交的文件中使用標(biāo)頭,但TIdMultipartFormDataStream尚未更新以解決該問題1)。

    1:注意 - 該TIdFormDataField.ContentTransfer屬性可以設(shè)置為空字符串,這將禁止Content-Transfer-Encoding發(fā)送標(biāo)頭,但它也會(huì)根據(jù)RFC 2045 第 6.1 節(jié)將文本作為 7 位 US-ASCII 發(fā)送,所以不要使用它選項(xiàng),如果您需要發(fā)送包含非 ASCII 字符的文本。

另外,請(qǐng)注意,Delphi 2007 不是啟用 Unicode 的 Delphi 版本(即StringAnsiString),這就是您的文本以 Latin-1 格式發(fā)布的原因。在 Unicode 之前的版本中,按原樣TIdMultiPartFormDataStream傳輸AnsiString數(shù)據(jù),因此您負(fù)責(zé)以AnsiString所需的字節(jié)編碼(例如 UTF-8)對(duì)發(fā)布的s進(jìn)行預(yù)編碼。

試試這個(gè):

url := 'someurl';


try

  data := TStringList.Create;

  try

    data.Values ['id']: = '6';

    data.Values ['name'] := UTF8Encode('àèìòù'); // <-- omit UTF8Encode() in D2009+...


    lParams := TIdMultiPartFormDataStream.Create;

    try

      for cont := 0 to data.Count-1 do

      begin

        lParams.AddFormField(data.Names[cont], data.ValueFromIndex[cont], 'utf-8').ContentTransfer := '8bit';

      end;


      try

        Response := IdHTTP1.Post(url, lParams);

      finally

        IdHTTP1.Disconnect;

      end;

    finally

      lParams.Free;

    end;

  finally

    data.Free;

  end;

except

  on E: Exception do

    Response := E.ClassName + ':' + E.Message;

end;


Result := Response;


查看完整回答
反對(duì) 回復(fù) 2021-06-19
  • 1 回答
  • 0 關(guān)注
  • 200 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)