关于QT中奇数个汉字出现newline in constant的错误
前面写了一篇关于QT中使用汉字的博客以为对汉字的使用了如指掌, 没想到今天把字符串一换, 换成偶数个没问题, 换成奇数个汉字, 哇擦, 报一个错误newline in constant, 瞬间意识到自己还是太年轻.
好了, 开始正题
先说下 在QT Creator可能出现的乱码的情况:
1. 打开文件时, 汉字就是乱码, 这种情况是因为你向文件写汉字的时候,文件是一套编码(比如GB2312), 然后读取文件的时候却用另一套编码来读(比如UTF-8), 就会出现这种情况, 解决方法很简单,就是把写和读时的编码方式设成一致
2. 文件显示正常, 却报错"newline in constant"或者"常量中有换行符"? 这种情况,往往出现在奇数个汉字中. 这是为什么呢? 这是MSVC在编译时的解读问题, MSVC在解读文件时会根据文件有没有BOM, (关于什么是BOM请参考链接1), 如果有BOM,那么按照BOM的方式去解读, 如果没有BOM,那么按照本地编码( 对于简体中文的Windows操作系统就是GB2312)去解读.因此我们的问题就出现了, 一般我的QT Creator中的项目editor设置里面默认编码是UTF-8,BOM里呢如果存在则保留. 但是如果不存在呢? 所以解决方法就是把设置为add if encoding is UTF-8, 再运行, OKAY, 完美.
注意思
3. 编译正常通过, 生成出来的程序却是乱码. 或者用qDebug()输出的中文时, 文件中显示正常, 显示出来是乱码. 这是因为MSVC生成的可执行文件是本地编码(GB2312), 而QT会以UTF-8编码来识别GB2312的文字. 解决方式就是在文件头加上
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
这个宏告诉MSVC,执行程序中字符的编码采用UTF-8,别用本地的编码
最后需要注意的时候,当你执行windows API的时候, API里面的比较一般会使用本地编码 , 所以使用类似FindWindow这样的API时, 字符串最好转成本地编码的形式
QString string1 = "我好帅";
HWND hMain = FindWindow(NULL, string1.toLocal8Bit());//找窗口句柄
注意当用了#pragma execution_character_set("utf-8")这句之后
QString::toLocal8BIT() 依然是GB2312
toLocal8BIT会转成
参考链接1:http://liuweilhy.blog.163.com/blog/static/11405670201510901627229/
参考链接2:http://www.cnblogs.com/gudi/p/4086183.html
update on 23/03/2020:
注意文件编码的修改:
关于QT中奇数个汉字出现newline in constant的错误相关推荐
- Qt中translate、tr关系 与中文问题
Qt中translate.tr关系 与中文问题 2010-09-22 00:15 题外话:何时使用 tr ? 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题 ...
- Qt中的unicode转换
在Qt中,在大多数情况下都是采用unicode的形式存储的,但是QByteArray实际上是以char的形式存储的,因此转换成unicode表示的QString时需要根据编码的类型进行转换. [cpp ...
- Qt中的OpenGL
Qt还是本人可移植GUI程序开发的首选,不过Qt开发普通的应用程序是行,但是据说效率太低,以至于像某些人说的那种刷新看得到一条条横线?这点我比较纳闷,就我使用的感觉,虽然Qt不以效率著称,但是事实上有 ...
- Qt中使用html语言对word进行图表操作
参考文献: http://www.cnblogs.com/softwaretesting/archive/2011/07/29/2121593.html http://www.2cto.com/kf/ ...
- Qt中tr()函数的使用
关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: 因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr 另一类人,确实是出于国际化的需要,将需要 ...
- 解决QT中使用不了搜狗中文输入法的问题
环境:ubuntu15.04/QT5.6.0 背景:最近开发用到QT5.6.0,在ubuntu中输入汉字使用的搜狗输入法,但是在QT中无法切换到搜狗输入法,手动能切换,但是切换后仍然无法打出汉字,在其 ...
- QT 中QTimer 和 startTimer()的区别
最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...
- QT 中使用 OpenCv 的 CascadeClassifier 报错
问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...
- 【Qt】Qt中使用ssl时报错:qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method
一.问题 在Qt中使用https,运行时报错: qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method 二.原因分析 SSLv2由 ...
最新文章
- 机器学习的敲门砖:手把手教你TensorFlow初级入门
- rust(70)-条件表达式
- 蓝桥杯单片机十一届省赛_“第十届蓝桥杯青少组C++省赛”前三题解题思路及参考答案!...
- c++对象的内存布局2--进阶篇---C++ 对象的内存布局(上)
- JDBC操作数据库的基本流程
- CGAffineTransform
- Javascript中的null、undefined、NaN
- 一个文科妹子的前端悲欢编程之路
- 7.生产者消费者 案例 (使用Lock 同步锁 方式,使用Condition完成线程之间的通信)...
- 关于 TCP window size
- 区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
- sqlite内存数据库和文件数据库的同步
- 数据结构面试常见问题总结
- playwright之贴吧签到
- CSDN如何上传照片
- ad中使用智能粘贴_AD元件复制粘贴使用技巧
- GDS和OTA未来之路
- C语言逻辑操作符的巧妙用法:an anagram of a palindrome
- ​从小样本学习出发,奔向星辰大海
- 风之语.惊闻周星驰电影票房超过30亿RMB
热门文章
- kafka php 安装配置,kafka安装及Kafka-PHP扩展的使用,kafkakafka-php扩展_PHP教程
- UI-148xLE-M相机参数
- 机器视觉:CMOS图像传感器
- kotlin之泛型的使用
- javascript面向对象系列第三篇——实现继承的3种形式
- python for symbian6
- ASP.NET AJAX学习记要(2)-下手之JavaScript
- python调用程序压缩文件_Python实现文件压缩和解压的示例代码
- 手机自动化测试IDE --手把手教你用Airtest模拟器来连接手机
- 字符串中第一次重复出现的数及第一次不重复出现的数