|
|
导航: |
论坛 -> Web应用开发
斑竹:bodies |
|
作者: |
|
2023/2/27 19:16:56 |
标题: |
请教。datasnap liunx下connection.execsql(str)总是乱码。 |
浏览:724 |
|
加入我的收藏 |
楼主: |
windows平台下都没问题,数据库是firebird,就是服务部署到centos下,执行语句存到数据里的数据就是乱码,但是用fdquery提交数据都没问题,类似这样的conn.execsql(str)这样执行中文就会乱码,str设成ansistring也不行。数据库字符集是gb_2312,试了半天,不知道改那里。数据库连接那里的CharacterSet设成NONe或gb_2312也不起作用。
----------------------------------------------
- |
作者: |
|
2023/2/27 20:45:31 |
1楼: |
你的服务器端是 Linux 还是客户端是 Linux?
Linux 的字符集是 GB_2312 么?
如果客户端和服务器端都完全相同的环境下, FdQuery 没问题,那你试试你的 str 采用 UTF8 编码。
FireBird 我一般数据库字符集我都用 UTF8 这样保证同时存入中文英文德文和繁体字都不会有问题。
这里总之就是你的 str 的编码问题。
----------------------------------------------
-
|
作者: |
|
2023/2/27 22:09:03 |
2楼: |
1、windows的中文怎么弄都是正确的。 2、centos下数据库中文乱码的问题确实是很麻烦,我也碰到 3、包括delphi带clientdataset,在linux下怎么试中文都是乱码,有些机一用到clientdataset程序就跳出去
----------------------------------------------
-
|
作者: |
|
2023/3/1 14:51:27 |
3楼: |
多谢二位回复,弄了半天还是不行。我今天在中间件里直接写插入语句,测试了下,一直是乱码。现在就是windows下都正常,包括中间件在windows下,数据库在centos上,都正常,只要中间件部署到centos就乱码。4个汉字就对应4个问号,????,我估计是转换字符串哪里出错了,用FDquery提交的都正常,就是这样execsql的乱码。字符串用ansistring/string/widestring,包括用UTF8Encode转换,都一样。连接stdb的字符集设了也没用。
function TServerMethods1.ExecSqlAnsi(Ps_Str: AnsiString):integer; var Ls_Query,Ls_Type:ansistring; begin Ls_Type := {$IFDEF LINUX}'LINUX'{$ELSE}'WINDOWS'{$ENDIF}; Ls_Query := 'insert into yt_log values(''测试数据'',''' + Ls_Type + ''',''测试数据'',''2023/3/1 13:08:01'')'; StDb.ExecSQL(Ls_Query); result := StDb.ExecSQL(Ps_Str); end;
----------------------------------------------
-
|
作者: |
|
2023/3/1 15:34:33 |
4楼: |
刚才试了下把centos的系统字符集改成gb2312,就可以了,execsql这里字符集根据系统来设定的。
----------------------------------------------
-
|
作者: |
|
2023/3/1 16:12:33 |
5楼: |
如果我没记错 可以 设定 const test = ''测试数据'' ; 指定编码 在论坛看到过一次
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速 https://www.cctry.com/>http://qalculate.github.io/downloads.html https://www.cctry.com/
|
作者: |
|
2023/3/1 16:49:25 |
6楼: |
linux 默认uft-8的比较多 可以手动设定(系统不一样还是有差别) 乱码问题 典型软件 peazip不管怎么设定 zip中文目录的那种都识别不出。不是打不开就是?号
https://www.cnblogs.com/hyang0/p/6397331.html
locale -a|grep '^[z|e][h|n]'|grep \\.|grep -v iso sudo locale-gen zh_CN.UTF-8 [@archlinux new-pac.wiki]$ sudo locale-gen zh_CN.UTF-8 [sudo] 的密码: Generating locales... en_US.UTF-8... done zh_CN.GB18030... done zh_CN.GBK... done zh_CN.UTF-8... done zh_CN.GB2312... done Generation complete.
locale-gen 后才能继续操作 localectl 例 1. 完全支持中文环境,但是以英文作为用户界面 /etc/locale.conf: LANG=zh_CN.utf8 LC_MESSAGES=en_US.utf8
localectl set-locale LANG=zh_CN.UTF8 现在用下面的命令在 /etc 文件夹里生成 关于地区的配置文件:
echo LANG=en_GB.UTF-8 > /etc/locale.conf export LANG=en_GB.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.html https://www.cctry.com/
|
|