|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2018/6/30 16:31:22 |
标题: |
FireDAC导入JSON时碰到中文无法处理 |
浏览:1858 |
|
加入我的收藏 |
楼主: |
FireDAC DataSet 导入及导出 JSON
我使用MySQL5.5 字符集是gbk,在fdConection不指定字符集,导入导出都没问题,就中文显示是乱码 如果指定了字符集,导出的JSON中文变成了乱码,再导入时报警:[fireDAC][Stan]-719. Invalid JSON storage format,Position [5097]
procedure TForm1.Button2Click(Sender: TObject); var lstream: TStringStream; begin lstream := TStringStream.Create(''); try lstream.Position := 0; fdQry.SaveToStream(lstream, sfJSON); memo1.Lines.Text := lstream.DataString; finally lstream.Free; end; end;
procedure TForm1.Button3Click(Sender: TObject); var lstream: TStringStream; begin lstream := TStringStream.Create(''); try lstream.Position := 0; lstream.WriteString(memo1.Lines.Text); lstream.Position := 0; FDMemTable1.Close; FDMemTable1.LoadFromStream(lstream, sfJSON); finally lstream.Free; end; end;
----------------------------------------------
- |
作者: |
|
2018/6/30 16:41:28 |
1楼: |
使用File方式处理倒是正常 if saveDialog1.Execute then FDMemTable1.saveToFile(saveDialog1.FileName, sfJSON);
if openDialog1.Execute then FDMemTable1.loadFromFile(openDialog1.FileName, sfJSON);
----------------------------------------------
-
|
作者: |
|
2018/7/1 20:19:46 |
2楼: |
因为sfJSON方式保存默认是UTF8,你上面用的lstream.WriteString(...)应该是UTF16,编码不一致。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2018/7/2 8:54:25 |
3楼: |
楼上正解,sfJSON 是UTF8的,不过 TStringStream 默认的编码是由系统决定的,Windows 是 ANSI,其他是 UTF8,所以创建的时候指定编码,TStringStream.Create('', TEncoding.UTF8)
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
|
作者: |
|
2018/7/2 15:34:10 |
4楼: |
标记一下。
----------------------------------------------
-
|
作者: |
|
2018/7/2 16:18:17 |
5楼: |
感谢全能,感谢银河,问题解决了
----------------------------------------------
-
|
|