1.1 Delphi10.2(xe10)写本地html遇到的字符
2018-11-25 本文已影响0人
维度WeDo愉快
近期一个小产品用到了echarts图像报表,需要调整里面的数据,但是总是出现乱码,过程如下:
问题描述
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是乱码
......
现在看delphi中的好多控件还是用ansi表示方式,后百度了很多说的都不对,只有下面的方法是对的。贡献给大家。
正确处理
- 定义如下函数
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;
- 调整先前的代码
......
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
我的主页:https://www.jianshu.com/u/c902b6d388b6
我的简介:号称是个技术工程师但是从没有深入的学习技术,都是停留在知其然上面,对其所以然研究甚少,以后通过这里学习和记录其所以然。