文章目录
前言
据说QT中文字符问题是QT工程问题的三座大山,最近使用QAxObject中的dynamicCall()控制操作excel时,总是保存时出错。已经命名好的excel保存关闭时又弹出保存对话框。原因是:
pWorkbook->dynamicCall("SaveAs (const QString&,int,const QString&,const QString&,bool,bool)",
QDir::toNativeSeparators(sXlsFile), 56, QString(""), QString(""), false, false);
调用保存时,sXlsFile
命名非法保存失败,检测sXlsFile
字符串去掉非法字符后保存不会有问题。
cell->dynamicCall("SetValue(const QVariant&)", strData); //修改单元格的数据
调用保存单元格数据时,引起系统异常。
怀疑和strData
中包含非法换行符等有关。
一、字符集
转自:CSDN博客
gb18030字符集兼容了gbk字符集,以两个字节表示一个文字。windows系统可能使用的就是这两种的一种。
unicode字符集以2个或以上的字节表示一个汉字。
通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。
utf8字符集以2个或以上的字节表示一个汉字。实际上具体的数值和unicode有很大的相关性。
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF。亦称为Latin1。
二、QString中使用的字符转换
1.FromLocal8Bit
一般中文在QT中显示乱码会用这个函数做一下转换:
QProgressDialog m_process(NULL);
m_process.setWindowTitle(QString::fromLocal8Bit("请稍后"));
QT助手的解释
[static] QString QString::fromLocal8Bit(const char *str, int size = -1)
Returns a QString initia