Qt中关于中文字符编码问题
2016-04-13 20:13
330 查看
今天在QtCreator中code的时候,遇到了一个奇怪的问题。我写了以下一段代码:
编译器报如下错误:
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的执行字符集:
第三种,改为使用MinGW的编译器。
这种编码问题只是源文件中的。另一个编码问题是生成的目标程序中的。要让没有装GBK编码的系统也能识别程序中的中文,就需要将程序中的中文编码为UTF-8。QString类内置的编码就是Unicode,因此,只要将所有中文转换为QString就可以了。需要注意的是在转换时要让Qt知道被转换的串的编码。例如,如果源文件编码为GBK,在Qt4中,可以这样写:
但是,在Qt5中,这两个函数被去除了,因此无法再用这种方法指定编码。不过,Qt5默认采用UTF-8的执行字符集,因此如果使用MinGW的编译器,就没有问题了。但如果是MSVC的编译器,还是需要采用上面所说的方法。
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的编译器,还是需要采用上面所说的方法。
相关文章推荐
- ASP编码必备的8条原则
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- Base64编码解码原理及C#编程实例
- C#编码好习惯小结
- javascript编码的几个方法详细介绍
- UTF8编码开发中页面空白问题的解决方法
- php生成固定长度纯数字编码的方法
- 重新restore了mysql到另一台机器上后mysql 编码问题报错
- c# Base64编码和图片的互相转换代码
- java自动根据文件内容的编码来读取避免乱码
- PHP写入WRITE编码为UTF8的文件的实现代码
- 设置php页面编码的两种方法示例介绍