失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Qt向Oracle插入中文乱码问题的解决方案

Qt向Oracle插入中文乱码问题的解决方案

时间:2023-01-02 00:24:44

相关推荐

Qt向Oracle插入中文乱码问题的解决方案

Qt向Oracle插入中文乱码问题的解决方案

常见问题

Q:

当服务器字符集为US7ASCII时,会发现无论是读取中文还是写入中文都是?

A:

这是由于Qt默认的字符编码是utf8,而US7ASCII存的是单字符型,他里面存着的中文实质上是十六进制ASCII码。

我们用plsql所查询看到的中文是经过转化的。

解决思路:

所以我们要读取中文,先要把数据库中的中文字符转换为ASCII码传进程序,再在程序内部将ASCII码转化为中文显示。

1.读取中文

先在sql语句中把要查询的字段转化为ASCII码,这里用到UTL_RAW.cast_to_raw函数例如:

select UTL_RAW.cast_to_raw(‘测试’) from dual --得到结果 B2E2CAD4 这是“测试”的十六进制ASCII码形式

所以在中文字段前加UTL_RAW.cast_to_raw

然后在程序内部做转换,把ascii转为字符。

QString res=QString::fromLocal8Bit(rec.value(0).toByteArray())

2.写入中文

同理,只需将顺序反一下,首先在程序内部将要写入的中文转化为十六进制ASCII码。

QString str=“测试”;

QByteArray buf=str.toLocal8Bit();

str=buf.toHex();

insert into table values (UTL_RAW.cast_to_varchar2’B2E2CAD4’) 成功插入中文’测试‘

再在sql语句中将ASCII码转回中文,ASCII转中文的函数为UTL_RAW.cast_to_varchar2,例:

select UTL_RAW.cast_to_varchar2(‘B2E2CAD4’) from dual --得到结果是 “测试”

在参数前加UTL_RAW.cast_to_varchar2函数

如果觉得《Qt向Oracle插入中文乱码问题的解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。