DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 4
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/24 14:21:29
标题:
FMXlinux编译后,数据库中文乱码 浏览:2287
加入我的收藏
楼主: 在ubuntu 20.04中设置好delphi 11.1 Paserver,编译后运行正常,但从数据库中取出中文后显示在listbox里,内容全是?。同样的内容编译为win32和android正常。数据库没有使用UTF8字符集。请大师指导下,谢谢。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/24 15:00:47
2楼: 可不可以在这里改呢?把字符转换为utf8
 AText:=FDMemTable1.FieldByName('department').AsString;
 ListBox1.Items.Add(AText);
改ubuntu的中文字符集可能会导致更加复杂的问题
----------------------------------------------
-
作者:
男 ddrfan (若苗瞬) ▲▲▲▲▲ -
普通会员
2022/3/24 15:31:41
3楼: 用的什么数据库啊?

Oracle要注意环境变量,和实际服务端设置一致。
HBase要注意String与byte[]转换缺省编码问题。
----------------------------------------------
Bye bye DDRFAN...
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/24 15:56:06
4楼: 通过datasnap远程访问的数据库:sybase .
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
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;
此帖子包含附件:
PNG 图像
大小:150.0K
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/24 21:12:22
7楼: 现在的问题是,怎样把一个string转化为linux可用的zh_CN.UTF-8。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/3/24 21:53:43
9楼: 如果要跨平台,在数据库字段里面,存储 UTF8 比较好。

楼主你可以自己试试数据库存储 UTF8 的字符串,在 WINDOWS 底下和 LINUX 底下,是否都能正确显示。

我自己用 FireBird 数据库,在 WINDOWS 底下,字符串我也用 UTF8,显示出来没有问题。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/24 22:31:37
10楼: 不知firebird是否支持linux本地连接。在linux本地使用数据库很难搞,我现在是使用远程数据库,用datasnap在中间层拿到数据,跨平台扛扛的,无须安装linux本地驱动。
但有时,例如单机版程序需要使用本地linux数据库,但linux的无数cpu相关、库依赖相关、linux版本相关,需要找不同的so驱动,特别是kylin这种定制的linux,内核虽然是ubuntu,但又人为的做了一些限制,这样会把好人搞残废的,真不是人干的活。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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-8



https://blog.csdn.net/u014570007/article/details/79036551
此帖子包含附件:
PNG 图像
大小: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/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
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就没问题了。
明天试试再报告。
谢谢大师指导。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/3/24 23:56:37
13楼: 第一,数据库你不是非要安装在 Linux 底下。
第二,FireBird 数据库支持 Linux 安装。

不管你的数据库在哪里,你的客户端运行在 Linux 底下,如果你的客户端需要连接 FireBird 数据库,你需要有一个 FireBird 的客户端库。

比如在 Windows 底下,是 FbClient.DLL 放到客户端程序里面。
在 Linux 底下,你应该去看看 FireBird 的文档。我自己没试过。

但是,在 Linux 底下安装使用 FireBird 数据库,我是干过的,没有任何问题。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/25 0:03:27
14楼: firebird要能够像在win下安装在linux就好了。
如果你开发一个linux程序,然后发布给用户,而用户还得根据不同的linux版本打要些该死的命令去安装然后再启动服务,而且还要安装各种依赖库,这样项目肯定完蛋。
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2022/3/25 9:53:38
15楼: 试试从数据库拉出为 byte,然后用 TEncoding 转?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 ddrfan (若苗瞬) ▲▲▲▲▲ -
普通会员
2022/3/25 10:37:22
16楼: sybase我没接触过,哎。

基本原理是:

中文Windows用的是GB18030(GBK,GB2312)。
Linux默认是UTF8。

最好不要改默认编码,会导致其它问题,一般都是需要我们的程序取兼容它们。

LZ截图中基本都是????这种。
不太像只错了一次编码(见:https://blog.csdn.net/ddrfan/article/details/122303699
所以挺奇怪的。
此帖子包含附件:
PNG 图像
大小:465.1K
----------------------------------------------
Bye bye DDRFAN...
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
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:~/桌面$
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2022/3/25 10:44:19
18楼: 你的gbk  gb 都没。转码都没希望
你看我的
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
? 
你的咋这么乱。。。
还是手工安装舒服

下面是      中国       gbk在utf8下显示
此帖子包含附件:
PNG 图像
大小: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/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
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:~/桌面$ 
把程序拷上去后也是乱码。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2022/3/25 13:08:48
20楼: 可选编码文本查看工具  mousepad
建议试下11楼源码  
按常理 不必如此。 试试吧
/etc/locale.gen
看下有这个文件吗。
改完了输入
locale-gen

具体看下面吧。
https://www.cnblogs.com/marklove/p/15197693.html
设置系统语言
此帖子包含附件:
PNG 图像
大小: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/
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/3/26 20:31:40
21楼: 使用utf8编码的数据库后没问题了
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行129.8828毫秒 RSS