QtSql编程RedHat linux系统下oracle数据库中文乱码

QtSql编程RedHat linux系统下oracle数据库中文乱码,第1张

首先确认你的NLS_LANG环境变量是AMERICAN_AMERICA.US7ASCII,拼写无误

统一编码设置:

统一GBK编码(gbk或gb18030)

QTextCodec *gbkTC = QTextCodec::codecForName("gbk")

    QTextCodec::setCodecForTr(gbkTC )

    QTextCodec::setCodecForLocale(gbkTC )

    QTextCodec::setCodecForCStrings(gbkTC )

统一UTF8编码(utf-8或utf8)

QTextCodec *utg8TC = QTextCodec::codecForName("utf-8")

    QTextCodec::setCodecForTr(utg8TC )

    QTextCodec::setCodecForLocale(utg8TC )

    QTextCodec::setCodecForCStrings(utg8TC )

编码转换/前提也是要设置默认编码,然后针对来源字符串的编码进行转换,例如:

QTextCodec *gbkTC = QTextCodec::codecForName("gb18030") 

QTextCodec *utg8TC = QTextCodec::codecForName("utf-8")

QTextCodec::setCodecForTr(gbkTC)

QTextCodec::setCodecForLocale(gbkTC)

QTextCodec::setCodecForCStrings(gbkTC)

1. UTF-8 转换 GBK

QString UTF2GBK(QString utfStr)

{

  return gbkTC->toUnicode(utfStr.toLocal8Bit())

}

2 GBK 转换 UTF-8

QString GBK2UTF(QString gbkStr)

{

  return utg8TC->toUnicode(gbkStr.toUtf8())

}

一般是汉字的编码出了问题,注意Gb2312\GBK\unicode(8位/16位有区别)之间的转换,有些与数据库字段类型的定义有关,例如:uchar有时表示unicode编码,而char\vchar表示ansi字符。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6674696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存