DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ahttp123
今日帖子: 22
在线用户: 17
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 huangxing (gx) ★☆☆☆☆ -
盒子活跃会员
2022/12/8 23:00:21
标题:
FMX在windows下面读取ini文件,中文读取乱码 浏览:974
加入我的收藏
楼主:   GetPrivateprofilestring('connect','Name','张三',Getbuf,200,'d:\1.ini'));
  Name1:=strpas(Getbuf);

这样的方法以前在VCL下面是常用的,现在这个移植到FMX就是乱码,大家有什么好方法解决吗?
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/12/8 23:51:55
1楼: 在 WINDOWS 底下,你的 ini 要用 ASCII 编码。但是,在安卓底下,必须用 UTF8 编码。

另外,如果是在 Android 底下,直接用 TIniFile 还不行。

请看:https://blog.csdn.net/pcplayer/article/details/120249280
----------------------------------------------
-
作者:
男 newbuyer (newbuyer) ★☆☆☆☆ -
普通会员
2022/12/9 1:05:24
2楼: 根本原因就是判断Encoding错误的问题, 如果没用BOM的确在Windows下判断是ANSI还是UTF8是很麻烦的事情,以前notepad默认是ANSI但是新版本的Windows也都默认UTF8(但是没用BOM). 对于FMX效果就是没用BOM也是默认UTF8.

虽然我没有试过, 但是我的建议是自己继承个TMemIniFile,Create方法在MSWINDOWS下LoadValues前预先读取现有文件几个字节判断是否BOM, 如果没有就把Encoding改成TEncoding.ANSI, 如果有就继续原来的.注意这个代码只应在{$IFDEF MSWINDOWS}下有效. 不过说实话你很难确保没用BOM就是ANSI, 全部读出来判断有没有unicode还是挺恶心的. 我现在的做法一律Create/UpdateFile都是指定UTF8,前提是我没有历史遗留的ini要处理.
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/12/12 8:40:50
3楼: 建议统一用 json
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 newbuyer (newbuyer) ★☆☆☆☆ -
普通会员
2022/12/12 10:21:38
4楼: 我个人愚见是需要用户配置的最好是界面实现, 必须(或者代价太高)使用直接编辑的情况其实ini/toml要比json要友好许多, 不要说用户, 我自己看到json也有种复杂的感觉, 少一个符号就完蛋注释还挺烦. 以前没流行JSON前用XML就觉得难受但是因为考虑树结构没办法, 强调灵活性的情况下或者根本不需要用户直接管的事情用json/xml.
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2022/12/12 11:50:58
5楼: 有没有想过,除了 ANSI UTF-8 还有第三个编码?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ddrfan (若苗瞬) ▲▲▲▲▲ -
普通会员
2022/12/12 17:37:09
6楼: 楼上意思是【编码格式】和【字符集】纠缠不休。
还是指其它的Unicode格式,比如【UTF16】……
----------------------------------------------
Bye bye DDRFAN...
作者:
男 newbuyer (newbuyer) ★☆☆☆☆ -
普通会员
2022/12/12 23:52:08
7楼: 有BOM Byte Order Mark 的文件Delphi库能自动认. 没有的话就麻烦, 因为历史问题Windows以前没用BOM的就一般是ANSI, 而不是UTF8, 所以推荐用ANSI/ASCII, 还有你不清楚用户用了什么编辑器产生什么保存效果. 只能在有限代价的情况处理最合理的需求.
----------------------------------------------
-
作者:
男 sensorwu (老吴) ▲▲▲△△ -
普通会员
2022/12/16 12:31:55
8楼:
uses
  System.SysUtils;


begin
  TEncoding.ANSI(Unicode,utf8) //使用这个记录方法就明白编码问题了
end;

参考下: https://blog.csdn.net/sensor_WU/article/details/125199637
----------------------------------------------
喜欢编程的一个DOS级程序员
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行58.59375毫秒 RSS