1. 程式人生 > >Delphi XE 10.2.3使用CEF4Delphi取網頁元素時碰到 變問號?的處理

Delphi XE 10.2.3使用CEF4Delphi取網頁元素時碰到 變問號?的處理

用CEF4Delphi取網頁元素時碰到ElementInnerText裡含有" "

比如網頁原始碼裡是"內容 "取出來顯示就變成"內容?"

搜尋大部分是說把" "替換成其它字元即可

但實際操作怎麼也替換不了,就算變數為AnsiString也不行

最後用了以下方法解決

參考網頁:

https://blog.csdn.net/qq_29683707/article/details/80860904

關於&nbsp空格轉成正常空格‘ ’的方法

 1>先把字串轉碼 let data = encodeURI(要轉化的值)

 2>接下來替換掉&nbsp空格 data = data .replace(/%C2%A0/g,'%20');
 3>再轉回來就ok了 data = decodeURI(data);

要用到encodeURI,找到Delphi版的

http://www.delphitop.com/html/zifuchuan/2599.html

 

方法1
user  Httpapp; 

HttpEncode(AnsiToUtf8('中文'));


方法2
uses
  IdURI;

..
begin
  S := TIdURI.URLEncode(str);
//
  S := TIdURI.URLDecode(str);
end;

使用方法2的TIdURI.URLEncode,程式出錯,原因不明

使用方法1成功

直接 TmpTitle:= HTTPEncode(TmpTitle); 即可

但編譯器提示警告

[dcc32 Warning] uMiniBrowser.pas(469): W1000 Symbol 'HTTPEncode' is deprecated: 'Use TNetEncoding.URL.Encode'
[dcc32 Warning] uMiniBrowser.pas(471): W1000 Symbol 'HTTPDecode' is deprecated: 'Use TNetEncoding.URL.Decode'
[dcc32 Hint] uMiniBrowser.pas(469): H2443 Inline function 'HTTPEncode' has not been expanded because unit 'System.NetEncoding' is not specified in USES list
[dcc32 Hint] uMiniBrowser.pas(471): H2443 Inline function 'HTTPDecode' has not been expanded because unit 'System.NetEncoding' is not specified in USES list

 

意思是HTTPEncode和HTTPDecode已經棄用請用TNetEncoding.URL.Encode和TNetEncoding.URL.Decode

點進HTTPEncode看看

function HTTPDecode(const AStr: string): string;
begin
  Result := TNetEncoding.URL.Decode(AStr);
end;

function HTTPEncode(const AStr: string): string;
begin
  Result := TNetEncoding.URL.Encode(AStr);
end;

其實就直接呼叫了

TNetEncoding.URL.Encode

所在單元是 System.NetEncoding