1.1 Delphi10.2(xe10)寫本地html遇到的字符集問題(亂碼問題)

近期一個小產(chǎn)品用到了echarts圖像報表,需要調(diào)整里面的數(shù)據(jù),但是總是出現(xiàn)亂碼,過程如下:

問題描述

Delphi10.2(xe10)寫本地html遇到的字符集問題(漢字輸出亂碼問題)

錯誤方法

......
ls := TStringList.Create;
  ls.LoadFromFile(lBase);
  for i := 0 to ls.Count - 1 do
  begin
    ltmp := ls[i];
    if pos('var lTitle = []', ltmp) > 0 then
    begin
      ltmp := 'var lTitle = ' + lTitle; 
      ls[i] := (ltmp);
    end;
    if pos('var lData =[]', ltmp) > 0 then
    begin
      ltmp := 'var lData =' + lData; 
      ls[i] := (ltmp);
    end;
  end;
  ls.SaveToFile(lMain);//這里保存完以后直接看html是亂碼
......

現(xiàn)在看delphi中的好多控件還是用ansi表示方式,后百度了很多說的都不對,只有下面的方法是對的。貢獻(xiàn)給大家。

正確處理

  1. 定義如下函數(shù)
procedure SaveUTF8File(const vFileName: string; vListText: TStringList);
var
  a: TEncoding;
begin
  a := TEncoding.GetEncoding(CP_UTF8);
  try
    vListText.SaveToFile(vFileName, a);
  finally
    a.free;
  end;
end;
  1. 調(diào)整先前的代碼
......
ls := TStringList.Create;
  ls.LoadFromFile(lBase);
  for i := 0 to ls.Count - 1 do
  begin
    ltmp := ls[i];
    if pos('var lTitle = []', ltmp) > 0 then
    begin
      ltmp := 'var lTitle = ' + lTitle; 
      ls[i] := (ltmp);
    end;
    if pos('var lData =[]', ltmp) > 0 then
    begin
      ltmp := 'var lData =' + lData; 
      ls[i] := (ltmp);
    end;
  end;
  SaveUTF8File(lMain,ls);//這里是【重點】
......

我的昵稱:維度WeDo
我的主頁:http://www.itdecent.cn/u/c902b6d388b6
我的簡介:號稱是個技術(shù)工程師但是從沒有深入的學(xué)習(xí)技術(shù),都是停留在知其然上面,對其所以然研究甚少,以后通過這里學(xué)習(xí)和記錄其所以然。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容