导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2022/3/24 14:21:29
标题:
FMXlinux编译后,数据库中文乱码
浏览:2291
加入我的收藏
楼主:
在ubuntu 20.04中设置好delphi 11.1 Paserver,编译后运行正常,但从数据库中取出中文后显示在listbox里,内容全是?。同样的内容编译为win32和android正常。数据库没有使用UTF8字符集。请大师指导下,谢谢。
----------------------------------------------
-
作者:
2022/3/24 14:46:50
1楼:
linux 默认啥字符集? 控制台下输入 locale 2.执行下面命令看看是否配置好了中文编码: locale-gen locale locale -a 通常默认是utf-8 当然可以改 LANG=C LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=en_US.UTF-8
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/24 15:00:47
2楼:
可不可以在这里改呢?把字符转换为utf8 AText:=FDMemTable1.FieldByName('department').AsString; ListBox1.Items.Add(AText); 改ubuntu的中文字符集可能会导致更加复杂的问题
----------------------------------------------
-
作者:
2022/3/24 15:31:41
3楼:
用的什么数据库啊? Oracle要注意环境变量,和实际服务端设置一致。 HBase要注意String与byte[]转换缺省编码问题。
----------------------------------------------
Bye bye DDRFAN...
作者:
2022/3/24 15:56:06
4楼:
通过datasnap远程访问的数据库:sybase .
----------------------------------------------
-
作者:
2022/3/24 18:24:58
5楼:
procedure TForm1.Button2Click(Sender: TObject); var AText:string; begin FDMemTable1.open; while Not FDMemTable1.Eof do begin AText:=FDMemTable1.FieldByName('department').AsString; //ListBox1.Items.Add(Utf8string( AText)); ListBox1.Items.Add(FDMemTable1.FieldByName('xh').AsString+'后面是乱字符:'+AText); FDMemTable1.Next; end; end;
此帖子包含附件: 大小: 150.0K
----------------------------------------------
-
作者:
2022/3/24 19:12:28
6楼:
用 其他方法显示gbk编码 乱码正常 问题点 数据库取出来后被转码乱码了 还是数据库取出来就该乱码 建议先搞通 转码问题 utf8 gbk gb 确认能转, 毕竟是linux不是win
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/24 21:12:22
7楼:
现在的问题是,怎样把一个string转化为linux可用的zh_CN.UTF-8。
----------------------------------------------
-
作者:
2022/3/24 21:23:34
8楼:
https://blog.csdn.net/weixin_44575514/article/details/105842049 c\c++ https://blog.csdn.net/wljun739/article/details/40786267 https://blog.csdn.net/u014570007/article/details/79036551
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/24 21:53:43
9楼:
如果要跨平台,在数据库字段里面,存储 UTF8 比较好。 楼主你可以自己试试数据库存储 UTF8 的字符串,在 WINDOWS 底下和 LINUX 底下,是否都能正确显示。 我自己用 FireBird 数据库,在 WINDOWS 底下,字符串我也用 UTF8,显示出来没有问题。
----------------------------------------------
-
作者:
2022/3/24 22:31:37
10楼:
不知firebird是否支持linux本地连接。在linux本地使用数据库很难搞,我现在是使用远程数据库,用datasnap在中间层拿到数据,跨平台扛扛的,无须安装linux本地驱动。 但有时,例如单机版程序需要使用本地linux数据库,但linux的无数cpu相关、库依赖相关、linux版本相关,需要找不同的so驱动,特别是kylin这种定制的linux,内核虽然是ubuntu,但又人为的做了一些限制,这样会把好人搞残废的,真不是人干的活。
----------------------------------------------
-
作者:
2022/3/24 22:42:47
11楼:
locale -a C POSIX zh_CN zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8 locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_Mon_ETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHon_E="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8https://blog.csdn.net/u014570007/article/details/79036551
此帖子包含附件: 大小: 17.5K
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/24 23:15:31
12楼:
楼上大师,我安装的是中文版本的ubuntu,已经是这样了: LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:en LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC=zh_CN.UTF-8 LC_TIME=zh_CN.UTF-8 LC_COLLATE="zh_CN.UTF-8" LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES="zh_CN.UTF-8" LC_PAPER=zh_CN.UTF-8 LC_NAME=zh_CN.UTF-8 LC_ADDRESS=zh_CN.UTF-8 LC_TELEPHONE=zh_CN.UTF-8 LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=zh_CN.UTF-8 LC_ALL= ubuntu显示中文是没问题的,现在是要在delphi里把正确的字符格式传过去。 如果我这样: FDMemTable1.Open; FDMemTable1.Append; FDMemTable1.FieldByName('username').AsString:='张三'; FDMemTable1.FieldByName('usertype').AsString:='管理员'; FDMemTable1.Post; 这样手动添加内存表记录,显示在ubuntu是没有问题的。 也许要建一个数据库,把字符集定义为UTF8就没问题了。 明天试试再报告。 谢谢大师指导。
----------------------------------------------
-
作者:
2022/3/24 23:56:37
13楼:
第一,数据库你不是非要安装在 Linux 底下。 第二,FireBird 数据库支持 Linux 安装。 不管你的数据库在哪里,你的客户端运行在 Linux 底下,如果你的客户端需要连接 FireBird 数据库,你需要有一个 FireBird 的客户端库。 比如在 Windows 底下,是 FbClient.DLL 放到客户端程序里面。 在 Linux 底下,你应该去看看 FireBird 的文档。我自己没试过。 但是,在 Linux 底下安装使用 FireBird 数据库,我是干过的,没有任何问题。
----------------------------------------------
-
作者:
2022/3/25 0:03:27
14楼:
firebird要能够像在win下安装在linux就好了。 如果你开发一个linux程序,然后发布给用户,而用户还得根据不同的linux版本打要些该死的命令去安装然后再启动服务,而且还要安装各种依赖库,这样项目肯定完蛋。
----------------------------------------------
-
作者:
2022/3/25 9:53:38
15楼:
试试从数据库拉出为 byte,然后用 TEncoding 转?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2022/3/25 10:29:23
16楼:
locale -a 的数据呢?这个是码表列表
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/25 10:37:22
16楼:
sybase我没接触过,哎。 基本原理是: 中文Windows用的是GB18030(GBK,GB2312)。 Linux默认是UTF8。 最好不要改默认编码,会导致其它问题,一般都是需要我们的程序取兼容它们。 LZ截图中基本都是????这种。 不太像只错了一次编码(见:https://blog.csdn.net/ddrfan/article/details/122303699 ) 所以挺奇怪的。
此帖子包含附件: 大小: 465.1K
----------------------------------------------
Bye bye DDRFAN...
作者:
2022/3/25 10:38:25
17楼:
hxq@hxq-virtual-machine:~/桌面$ locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX zh_CN.utf8 zh_SG.utf8 hxq@hxq-virtual-machine:~/桌面$
----------------------------------------------
-
作者:
2022/3/25 10:44:19
18楼:
你的gbk gb 都没。转码都没希望 你看我的 zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8 ? 你的咋这么乱。。。 还是手工安装舒服 下面是 中国 gbk在utf8下显示
此帖子包含附件: 大小: 3,939B
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/25 11:01:21
19楼:
我从ubuntu官网下载安装的ubuntu 20.04,据说这个版本很稳定,对FMXlinux支持比较好。 银河麒麟kylin 内核也是ubuntu, locale -a是这样的: kylin@kylin-VMware-Virtual-Platform:~/桌面$ locale -a C C.UTF-8 en_US.utf8 POSIX zh_CN.utf8 zh_SG.utf8 kylin@kylin-VMware-Virtual-Platform:~/桌面$ 把程序拷上去后也是乱码。
----------------------------------------------
-
作者:
2022/3/25 13:08:48
20楼:
可选编码文本查看工具 mousepad 建议试下11楼源码 按常理 不必如此。 试试吧 /etc/locale.gen 看下有这个文件吗。 改完了输入 locale-gen 具体看下面吧。 https://www.cnblogs.com/marklove/p/15197693.html 设置系统语言
此帖子包含附件: 大小: 80.8K
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2022/3/26 20:31:40
21楼:
使用utf8编码的数据库后没问题了
----------------------------------------------
-