关于XE10.2将文本转码UTF-8的问题

crazy_boom 2019-08-22 05:25:17
问题描述
转UTF-8的函数在DELPHI7.0的环境里 导出的文件格式都是正确的。
同样的代码移植到XE10.2环境里 导出来的文件内容格式 就不正常了。


//转码过程如下
procedure Tfrm_outdata.SaveUTF8File(AContent, AFileName: string);
var
ffileStream:TFileStream;
futf8Bytes: string;
S: string;
begin
ffileStream:=TFileStream.Create(AFileName,fmCreate);
futf8Bytes:= UTF8Encode(AContent);
S:=#$EF#$BB#$BF;
ffileStream.Write(S[1],Length(S));
ffileStream.Write(futf8Bytes[1],Length(futf8Bytes));
ffileStream.Free;
end;

//调用方法如下:将memoa的内容转码生成文件名为filenameok的文件
SaveUTF8File( Memoa.Lines.Text,filenameok);


转码内容 delphi7.0 的转码文件内容:
<?xml version="1.0" encoding="utf-8"?>
<SIGNATURE xmlns="www.xxxxxx.com">
<OBJECT>
<PACKAGE>
<ENVELOPINFO>
<VERSION>v1.0</VERSION>
<MESSAGE_ID>25CAF2C5-29E0-4F6E-9AE0-121C5C6CA873</MESSAGE_ID>
<FILE_NAME>k_init_20190812160838_1301000061#1.xml</FILE_NAME>
<MESSAGE_TYPE>init</MESSAGE_TYPE>
<SENDER_ID>1301000061</SENDER_ID>
<SEND_TIME>2019-08-12 16:08:38</SEND_TIME>
<RECEIVER_ID>1300000000</RECEIVER_ID>
<SOFTTYPE>1</SOFTTYPE>
<SENDERNAME>某某有限公司</SENDERNAME>
</ENVELOPINFO>
<DATAINFO>
<ROWINFO>
<I_ITEM_CODE>G0310000095157</I_ITEM_CODE>
<BARCODE></BARCODE>
<YPPH>20181108</YPPH>
<VDATE>2020-10-31 00:00:00</VDATE>

而 XE10.2转码出来的文件中的内容为: 内容松散 并且汉字有乱码

? ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " u t f - 8 " ? >

< S I G N A T U R E x m l n s = " w w w . xxxxxx . c o m " >

< O B J E C T >

< P A C K A G E >

< E N V E L O P I N F O >

< V E R S I O N > v 1 . 0 < / V E R S I O N >

< M E S S A G E _ I D > C D 6 8 A 1 3 C - 2 D D 9 - 4 A E F - B 4 6 F - 7 5 F 6 4 B 4 E 8 0 C 2 < / M E S S A G E _ I D >

< F I L E _ N A M E > k _ i n _ 2 0 1 9 0 8 2 2 1 7 0 5 3 8 0 1 0 _ 1 3 0 1 0 0 0 0 6 1 # 1 . x m l < / F I L E _ N A M E >

< M E S S A G E _ T Y P E > i n < / M E S S A G E _ T Y P E >

< S E N D E R _ I D > 1 3 0 1 0 0 0 0 6 1 < / S E N D E R _ I D >

< S E N D _ T I M E > 2 0 1 9 - 0 8 - 2 2 1 7 : 0 5 : 3 8 < / S E N D _ T I M E >

< R E C E I V E R _ I D > 1 3 0 0 0 0 0 0 0 0 < / R E C E I V E R _ I D >

< S O F T T Y P E > 1 < / S O F T T Y P E >

< S E N D E R N A M E > 砽SO酧;So?gP杔Q鳶< / S E N D E R N A M E >

< / E N V E L O P I N F O >

< D A T A I N F O >

< R O W I N F O >

< I _ I T E M _ C O D E > J 0 3 1 0 0 0 0 1 1 8 9 2 0 < / I _ I T E M _ C O D E >

< Y P P H > 1 9 0 3 0 0 9 < / Y P P H >

< V D A T E > 2 0 2 0 - 1 0 - 3 1 0 0 : 0 0 : 0 0 < / V D A T E >

< P A C K A G E > 6 4 u g / 稶* 1 2 0 稶/ /e< / P A C K A G E >

< U N I T > 襳< / U N I T >

< N U M > 1 0 0 < / N U M >

< J Z _ D A T E > 2 0 1 9 - 0 8 - 2 0 0 0 : 0 0 : 0 0 < / J Z _ D A T E >

< F P H > A D H 1 0 0 2 7 1 5 5 < / F P H >

< I _ M E R _ C O D E > 9 1 1 3 0 1 0 0 6 9 5 8 5 2 3 6 4 Y < / I _ M E R _ C O D E >

< M E R _ N A M E > 齎o働N罭X;So?gP杔Q鳶D < / M E R _ N A M E >

< M E R A _ C O D E > 1 3 0 1 0 2 0 0 0 0 0 0 < / M E R A _ C O D E >

< B I L L _ T Y P E > 1 < / B I L L _ T Y P E >

< / R O W I N F O >

< R O W I N F O >

< I _ I T E M _ C O D E > J 0 3 1 0 0 0 0 1 1 8 9 3 0 < / I _ I T E M _ C O D E >

< Y P P H > 1 8 1 2 1 6 3 < / Y P P H >

< V D A T E > 2 0 2 0 - 0 9 - 3 0 0 0 : 0 0 : 0 0 < / V D A T E >

< P A C K A G E > 3 2 u g / 稶* 1 2 0 稶/ /e< / P A C K A G E >

< U N I T > 襳< / U N I T >

< N U M > 2 0 < / N U M >

< J Z _ D A T E > 2 0 1 9 - 0 8 - 2 0 0 0 : 0 0 : 0 0 < / J Z _ D A T E >

< F P H > A D H 1 0 0 2 7 1 5 5 < / F P H >

< I _ M E R _ C O D E > 9 1 1 3 0 1 0 0 6 9 5 8 5 2 3 6 4 Y < / I _ M E R _ C O D E >




...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazy_boom 2019-08-24
  • 打赏
  • 举报
回复

procedure SaveUTF8File(Content, FileName: string);
var
  SS: TStringStream;
begin
  SS := TStringStream.Create('', TEncoding.UTF8);
  SS.WriteString(Content);
  SS.SaveToFile(FileName);
  SS.Free;
end;
crazy_boom 2019-08-24
  • 打赏
  • 举报
回复
我已经使用了 另一个方法 实现了utf-8的导出 换了一个函数的写法。不过还是谢谢BlueStorm 大哥
BlueStorm 2019-08-23
  • 打赏
  • 举报
回复
或者 futf8Bytes: string; S: string; 改为 futf8Bytes: RawByteString; S: RawByteString;
BlueStorm 2019-08-23
  • 打赏
  • 举报
回复
Memoa.Lines.SaveToFile(filenameok, TEncoding.UTF8);

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧