前面写了一篇关于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的错误相关推荐

  1. Qt中translate、tr关系 与中文问题

    Qt中translate.tr关系 与中文问题 2010-09-22 00:15 题外话:何时使用 tr ? 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题 ...

  2. Qt中的unicode转换

    在Qt中,在大多数情况下都是采用unicode的形式存储的,但是QByteArray实际上是以char的形式存储的,因此转换成unicode表示的QString时需要根据编码的类型进行转换. [cpp ...

  3. Qt中的OpenGL

    Qt还是本人可移植GUI程序开发的首选,不过Qt开发普通的应用程序是行,但是据说效率太低,以至于像某些人说的那种刷新看得到一条条横线?这点我比较纳闷,就我使用的感觉,虽然Qt不以效率著称,但是事实上有 ...

  4. Qt中使用html语言对word进行图表操作

    参考文献: http://www.cnblogs.com/softwaretesting/archive/2011/07/29/2121593.html http://www.2cto.com/kf/ ...

  5. Qt中tr()函数的使用

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: 因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr 另一类人,确实是出于国际化的需要,将需要 ...

  6. 解决QT中使用不了搜狗中文输入法的问题

    环境:ubuntu15.04/QT5.6.0 背景:最近开发用到QT5.6.0,在ubuntu中输入汉字使用的搜狗输入法,但是在QT中无法切换到搜狗输入法,手动能切换,但是切换后仍然无法打出汉字,在其 ...

  7. QT 中QTimer 和 startTimer()的区别

    最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...

  8. QT 中使用 OpenCv 的 CascadeClassifier 报错

    问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...

  9. 【Qt】Qt中使用ssl时报错:qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method

    一.问题 在Qt中使用https,运行时报错: qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method 二.原因分析 SSLv2由 ...

最新文章

  1. 机器学习的敲门砖:手把手教你TensorFlow初级入门
  2. rust(70)-条件表达式
  3. 蓝桥杯单片机十一届省赛_“第十届蓝桥杯青少组C++省赛”前三题解题思路及参考答案!...
  4. c++对象的内存布局2--进阶篇---C++ 对象的内存布局(上)
  5. JDBC操作数据库的基本流程
  6. CGAffineTransform
  7. Javascript中的null、undefined、NaN
  8. 一个文科妹子的前端悲欢编程之路
  9. 7.生产者消费者 案例 (使用Lock 同步锁 方式,使用Condition完成线程之间的通信)...
  10. 关于 TCP window size
  11. 区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
  12. sqlite内存数据库和文件数据库的同步
  13. 数据结构面试常见问题总结
  14. playwright之贴吧签到
  15. CSDN如何上传照片
  16. ad中使用智能粘贴_AD元件复制粘贴使用技巧
  17. GDS和OTA未来之路
  18. C语言逻辑操作符的巧妙用法:an anagram of a palindrome
  19. ​从小样本学习出发,奔向星辰大海
  20. 风之语.惊闻周星驰电影票房超过30亿RMB

热门文章

  1. kafka php 安装配置,kafka安装及Kafka-PHP扩展的使用,kafkakafka-php扩展_PHP教程
  2. UI-148xLE-M相机参数
  3. 机器视觉:CMOS图像传感器
  4. kotlin之泛型的使用
  5. javascript面向对象系列第三篇——实现继承的3种形式
  6. python for symbian6
  7. ASP.NET AJAX学习记要(2)-下手之JavaScript
  8. python调用程序压缩文件_Python实现文件压缩和解压的示例代码
  9. 手机自动化测试IDE --手把手教你用Airtest模拟器来连接手机
  10. 字符串中第一次重复出现的数及第一次不重复出现的数