关于qt5中文乱码的问题

Jerryup 2018-06-26 03:45:08
我用的系统是win7 32位,编译器是mingw,qt版本5.11.1,但是在在调用qDebug()输出中文时候,都是乱码,几乎各种方法都试过了,就是不行,请问大神是什么原因啊?
qDebug() << QObject::tr( "我是中国人").toLocal8Bit().data();
qDebug() << QObject::tr(" 我是中国人").toStdString().data();
qDebug() << QObject::tr("我是中国人").toLatin1().data();
qDebug() << QStringLiteral("中文");
qDebug() << QString::fromWCharArray(L"中文");
qDebug() << QString("中国").toLatin1();
QString str = "你好";
qDebug()<<str.toUtf8().data();
QString g("你好");
const char* b=g.toStdString().c_str();
qDebug() << b;以上方法都不行,请高手指点!
...全文
1451 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
_肆 2018-07-03
  • 打赏
  • 举报
回复
#include <QDebug>
qDebug()<<QString::fromLocal8Bit("你好?");

这样应该是最正确的啊,我也是32位,尽量少用tr
赵4老师 2018-07-03
  • 打赏
  • 举报
回复
将输出重定向到文本文件,看文件中的乱码到底对应哪种汉字编码。
Jerryup 2018-07-03
  • 打赏
  • 举报
回复
引用 37 楼 ai977313677 的回复:
引用 36 楼 Jerryup 的回复:
调试模式依然是乱码
调试也是没有问题的,我的调试器也是gdb,不过是win10系统,不太清楚有没有影响
奇怪了,我按照你的配置改了一下依然是乱码,难道是系统问题?
Jerryup 2018-07-03
  • 打赏
  • 举报
回复
引用 37 楼 ai977313677 的回复:
引用 36 楼 Jerryup 的回复:
调试模式依然是乱码
调试也是没有问题的,我的调试器也是gdb,不过是win10系统,不太清楚有没有影响
好奇怪,难道是系统的影响?我按你的配置修改了依然是乱码
  • 打赏
  • 举报
回复
引用 30 楼 Jerryup 的回复:
[quote=引用 29 楼 ai977313677 的回复:]
你试试这句话
qDebug()<<"你好";
不行啊[/quote]
我觉得,应该是你的设置出了问题,这是在我的电脑上运行的结果,你可以贴一下这个设置,或者相关的设置项目
Jerryup 2018-07-02
  • 打赏
  • 举报
回复
引用 27 楼 goldenhawking 的回复:
首先,tr用法不对。tr里面最好只出现ascii标准字符,而后在ts文件里面翻译为中文。要是代码里有中文,请遵循下面建议。若在qtcreator和gnu编译器下,所有代码存为utf-8,用fromutf8包裹中文。若在vc编译器加vs,则代码存为gb2312,所有中文用fromlocal8bit。若搞不清楚代码的编码,用记事本打开,另存为可以修改编码。不建议在vc使用utf-8或者在qtcreator里用gb2312.
fromutf8包裹试过了,不行的
Jerryup 2018-07-02
  • 打赏
  • 举报
回复
引用 29 楼 ai977313677 的回复:
你试试这句话 qDebug()<<"你好";
不行啊
  • 打赏
  • 举报
回复
引用 36 楼 Jerryup 的回复:
调试模式依然是乱码
调试也是没有问题的,我的调试器也是gdb,不过是win10系统,不太清楚有没有影响
Jerryup 2018-07-02
  • 打赏
  • 举报
回复
调试模式依然是乱码
Jerryup 2018-07-02
  • 打赏
  • 举报
回复
引用 34 楼 ai977313677 的回复:
你说的是这个项目? 你看看我的控制台输出内容
请问你的调试器是mingw还是vc++的?点击的运行还是还是调试啊?win7系统吗?
  • 打赏
  • 举报
回复
你说的是这个项目?
你看看我的控制台输出内容
Jerryup 2018-07-02
  • 打赏
  • 举报
回复
引用 32 楼 ai977313677 的回复:
[quote=引用 30 楼 Jerryup 的回复:] [quote=引用 29 楼 ai977313677 的回复:] 你试试这句话 qDebug()<<"你好";
不行啊[/quote] 我觉得,应该是你的设置出了问题,这是在我的电脑上运行的结果,你可以贴一下这个设置,或者相关的设置项目[/quote]你这是建的consle application吧,我建的是Widgets applition,你试着建Widgets applition项目测试一下。肯定是乱码,估计是qt的一个bug,5.4版本就是这个。
  • 打赏
  • 举报
回复
你试试这句话
qDebug()<<"你好";
  • 打赏
  • 举报
回复
我的做法是全部用语言家翻译,例子
https://blog.csdn.net/goldenhawking/article/details/50530046
  • 打赏
  • 举报
回复
首先,tr用法不对。tr里面最好只出现ascii标准字符,而后在ts文件里面翻译为中文。要是代码里有中文,请遵循下面建议。若在qtcreator和gnu编译器下,所有代码存为utf-8,用fromutf8包裹中文。若在vc编译器加vs,则代码存为gb2312,所有中文用fromlocal8bit。若搞不清楚代码的编码,用记事本打开,另存为可以修改编码。不建议在vc使用utf-8或者在qtcreator里用gb2312.

赵4老师 2018-06-29
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

建议先学会用这个函数观察比如你代码中的"啊"到底对应上面哪个字节序列:
void HexDump(char *buf,int len,int addr) {
int i,j,k;
char binstr[80];

for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%08x -",i+addr);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
}
}
Jerryup 2018-06-29
  • 打赏
  • 举报
回复
引用 17 楼 tajon1226 的回复:
qDebug() << L"你好";试试。 百度一下5.11做了哪些更改? 实在不行,可以直接看qDebug的源码,也有可能是这个版本的一个bug!!!
试过了,不行。
Jerryup 2018-06-29
  • 打赏
  • 举报
回复
引用 24 楼 cotwin 的回复:
QString::fromLocal8Bit("中文")
还是不行啊
cotwin 2018-06-29
  • 打赏
  • 举报
回复
QString::fromLocal8Bit("中文")
Jerryup 2018-06-29
  • 打赏
  • 举报
回复
准确的说是在运行模式下能正确输出中文,但在调式模式下是乱码。
加载更多回复(19)
2022年11月4日-2022年11月14日购买当前课程赠送课程学习地址如下:https://edu.csdn.net/course/detail/32434https://edu.csdn.net/course/detail/35658https://edu.csdn.net/course/detail/30223https://edu.csdn.net/course/detail/32408https://edu.csdn.net/course/detail/32429注:因赠送课程不会出现在已订阅课程列表中,以下课程学习地址一定要收藏保存。#课程服务 在线答疑:本课程设有专门的讨论留言区,学习中遇到任何问题,直接给老师留言即可,老师都会及时进行回复。远程协助:如果遇到复杂问题,老师还可进行远程协助,这个一般可不是一两百元的课程就能享受到的。源码分享:为了让大家更好的进行项目实战,老师还将课程中涉及到的所有源码分享给学员,按照视频中的提示进行下载即可。在CSDN分享C++ Qt开发知识已经有6年了,感谢众多博友对我的支持,了解到很多人对Qt的使用还是有些困扰,例如Qt环境搭建,Qt布局的使用,如何使用Qt编写复杂的界面,如何自定义非标控件,Qt如何和Web交互,Qt和后台接口如何交互等;经过这几年的整理,我决定出这套《Qt高级开发视频教程》,带领大家学习Qt高级开发知识,学习如何使用Qt开发企业级别的项目;通过本课程的学习,大家将会达到企业招聘的中高级要求。为了照顾零基础学员,本课程第一章会介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。即使没有Qt开发的学习经验,也能跟着课程顺利学习。课程核心知识点地图如下: 课程每章核心知识点介绍如下: 第一章:介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。第二章:了解到很多学员对于Qt界面布局很不熟悉,将会详细介绍Qt设计器布局,以及如何C++代码手写布局,从常见的企业级项目入手,带领大家学会各种布局的实现,例如WPS、腾讯会议、优酷、迅雷等界面的实现;界面布局会了,这是企业项目开发的第一步,还有更重要的无边框窗口,如何设计一个合理的无边框窗口很重要,第三/四章:详细介绍如何实现一个无边框窗口,如何自定义标题栏,如何实现拖拽拉伸;第四章将会介绍如何自定义非标控件,优化Qt界面。第五章:介绍Qt web混合编程,一个商用项目,必然会涉及到web交互,这也是很多Qt开发者的弱项,这一章讲详细介绍C++ Qt web混合开发。第六章:既然是做企业级项目,必然需要和后台交互,http编程也是必要的,将详细介绍http编程,用户注册,登录,后台接口请求等知识;通过第五、六章的学习,将会是你的Qt开发技术更上一层楼。第七章:介绍Qt并发编程,耗时任务处理,进程调用等知识。第八、九章:讲解 Qt 比较重要的知识,图形视图结构,以及MVD模式;通过这两章的学习,大家会对图形视图有更好的了解。第十章:本章是独立章节,主要介绍Qt中一些特殊技巧,项目编译,dpi适配、多语言等知识。第十一章:是我们的企业级项目实战:实现一个视频会议客户端,本项目可以进行多人视频通话,直播,桌面分享等功能,本项目我会从零开始,进行项目搭建,功能调试,bug fixed, 带领大家做一个企业级项目。希望通过本课程的学习,大家的C++ Qt开发技术能有质的飞越,能找到自己心仪的工作。课程中如果讲的不对的地方,请大家指出,我及时修正,我也只是一个普通开发者,也不是所有的技术都会,尽我所能,把我所会的教给大家,让我们一起为Qt的发展,尽一份绵薄之力。 下面是本课程一些项目的截图: 1 可以滑动的设置界面         2 所有图形的绘制       3 视频播放器          4 高仿youku界面         5 视频会议         相信通过本课程的学习,大家有能力实现绝大部分客户端项目,从此用C++ Qt再也不会有难写的界面。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧