近期一個(gè)小產(chǎn)品用到了echarts圖像報(bào)表尘奏,需要調(diào)整里面的數(shù)據(jù),但是總是出現(xiàn)亂碼,過(guò)程如下:
問(wèn)題描述
Delphi10.2(xe10)寫(xiě)本地html遇到的字符集問(wèn)題(漢字輸出亂碼問(wèn)題)
錯(cuò)誤方法
......
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表示方式杨帽,后百度了很多說(shuō)的都不對(duì),只有下面的方法是對(duì)的嗤军。貢獻(xiàn)給大家注盈。
正確處理
- 定義如下函數(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;
- 調(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);//這里是【重點(diǎn)】
......
我的昵稱(chēng):維度WeDo
我的主頁(yè):http://www.reibang.com/u/c902b6d388b6
我的簡(jiǎn)介:號(hào)稱(chēng)是個(gè)技術(shù)工程師但是從沒(méi)有深入的學(xué)習(xí)技術(shù),都是停留在知其然上面叙赚,對(duì)其所以然研究甚少当凡,以后通過(guò)這里學(xué)習(xí)和記錄其所以然。