首先确认你的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字符。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)