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插入中文乱码问题的解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!