您的位置:首页 > 编程语言 > Qt开发

Qt中关于中文字符编码问题

2016-04-13 20:13 330 查看
今天在QtCreator中code的时候,遇到了一个奇怪的问题。我写了以下一段代码:

QString filePath;
filePath = QFileDialog::getOpenFileName(NULL,QString("打开户型图"),QString(),QString("户型图文件(*.bmp *.jpg *.png)"));


编译器报如下错误:

E:\Qt Projects\Huxing\src\mainwindow.cpp:87: error: C2146: 语法错误: 缺少“)”(在标识符“鎴峰瀷鍥炬枃浠”的前面)

不用说,一定是中文编码的问题。于是在网上查阅了一番资料,得出了以下一些心得。

中文字符一般采用两套编码,GBK和UTF-8。Windows平台下一般是GBK编码,其他平台一般是UTF-8。我的这个源文件是用QtCreator生成的,在工具-》选项-》文本编辑器-》行为中我设置了默认编码为UTF-8,而我的编译器是MSVC,编码为GBK,所以就产生了错误。

解决方法很简单:

第一种,更改QtCreator的编码为GBK,然后新建源文件,把旧文件里的代码全部拷贝过去。缺点么,采用GBK而不是UTF-8就是最大的缺点了。
第二种,与上面一样,但改编码为UTF-8+BOM。需要在源文件头部添加如下代码来告诉MSVC使用UTF-8的执行字符集:

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif


第三种,改为使用MinGW的编译器。

这种编码问题只是源文件中的。另一个编码问题是生成的目标程序中的。要让没有装GBK编码的系统也能识别程序中的中文,就需要将程序中的中文编码为UTF-8。QString类内置的编码就是Unicode,因此,只要将所有中文转换为QString就可以了。需要注意的是在转换时要让Qt知道被转换的串的编码。例如,如果源文件编码为GBK,在Qt4中,可以这样写:

QTextCodec::setCodecForCString(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));



但是,在Qt5中,这两个函数被去除了,因此无法再用这种方法指定编码。不过,Qt5默认采用UTF-8的执行字符集,因此如果使用MinGW的编译器,就没有问题了。但如果是MSVC的编译器,还是需要采用上面所说的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编码