|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2022/12/8 23:00:21 |
标题: |
FMX在windows下面读取ini文件,中文读取乱码 |
浏览:974 |
|
加入我的收藏 |
楼主: |
GetPrivateprofilestring('connect','Name','张三',Getbuf,200,'d:\1.ini')); Name1:=strpas(Getbuf);
这样的方法以前在VCL下面是常用的,现在这个移植到FMX就是乱码,大家有什么好方法解决吗?
----------------------------------------------
- |
作者: |
|
2022/12/8 23:51:55 |
1楼: |
在 WINDOWS 底下,你的 ini 要用 ASCII 编码。但是,在安卓底下,必须用 UTF8 编码。
另外,如果是在 Android 底下,直接用 TIniFile 还不行。
请看:https://blog.csdn.net/pcplayer/article/details/120249280
----------------------------------------------
-
|
作者: |
|
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要处理.
----------------------------------------------
-
|
作者: |
|
2022/12/12 8:40:50 |
3楼: |
建议统一用 json
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2022/12/12 10:21:38 |
4楼: |
我个人愚见是需要用户配置的最好是界面实现, 必须(或者代价太高)使用直接编辑的情况其实ini/toml要比json要友好许多, 不要说用户, 我自己看到json也有种复杂的感觉, 少一个符号就完蛋注释还挺烦. 以前没流行JSON前用XML就觉得难受但是因为考虑树结构没办法, 强调灵活性的情况下或者根本不需要用户直接管的事情用json/xml.
----------------------------------------------
-
|
作者: |
|
2022/12/12 11:50:58 |
5楼: |
有没有想过,除了 ANSI UTF-8 还有第三个编码?
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2022/12/12 17:37:09 |
6楼: |
楼上意思是【编码格式】和【字符集】纠缠不休。 还是指其它的Unicode格式,比如【UTF16】……
----------------------------------------------
Bye bye DDRFAN...
|
作者: |
|
2022/12/12 23:52:08 |
7楼: |
有BOM Byte Order Mark 的文件Delphi库能自动认. 没有的话就麻烦, 因为历史问题Windows以前没用BOM的就一般是ANSI, 而不是UTF8, 所以推荐用ANSI/ASCII, 还有你不清楚用户用了什么编辑器产生什么保存效果. 只能在有限代价的情况处理最合理的需求.
----------------------------------------------
-
|
作者: |
|
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级程序员
|
|