中文乱码 急!!!!

yanfengim 2010-11-10 10:36:03
首先我在main函数中已经设置了 代码如下:
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);

然后我在一个常量class中定义了好多含有中午的常量比如:
const QString cStrFontLu= "路";

我在另一个class引用cStrFontLu的时候为什么显示的是乱码,请知道的告诉一下谢谢
...全文
324 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbzhang800 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 deyili 的回复:]

引用 9 楼 dbzhang800 的回复:

引用 6 楼 deyili 的回复:

Visual studio 是可以智能识别文件编码并转换,其它的IDE是不能的。

这个 Visual studio 没有关系,只不过在简体中文windows下。编译器 cl.exe 处理带BOM的 utf-8,utf-16,等编码文件时,会转码成 gbk

这取决于你有没有定义UNICODE……
[/Quote]
UNICODE 涉及的是另一个问题,影响的是宽窄字符串 "abc" ,L"abc"。
lanhuaiyu 2010-11-10
  • 打赏
  • 举报
回复
兄弟,最好不要这样用;源文件一般是文本格式,里面保存的数据尤其对亚洲语言来说有很大的不确定性;
编辑器源文件对亚洲语言支持不好,建议程序中用English,
然后用linguist进行翻译;

奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dbzhang800 的回复:]

引用 6 楼 deyili 的回复:

Visual studio 是可以智能识别文件编码并转换,其它的IDE是不能的。

这个 Visual studio 没有关系,只不过在简体中文windows下。编译器 cl.exe 处理带BOM的 utf-8,utf-16,等编码文件时,会转码成 gbk
[/Quote]
这取决于你有没有定义UNICODE宏,如果有,会转换成Unicode
dbzhang800 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 deyili 的回复:]

Visual studio 是可以智能识别文件编码并转换,其它的IDE是不能的。
[/Quote]
这个 Visual studio 没有关系,只不过在简体中文windows下。编译器 cl.exe 处理带BOM的 utf-8,utf-16,等编码文件时,会转码成 gbk
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
把完整的程序贴上来看看吧
yanfengim 2010-11-10
  • 打赏
  • 举报
回复
开发环境是Qt Creator
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
Visual studio 是可以智能识别文件编码并转换,其它的IDE是不能的。
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
什么开发环境?Visual studio, eclipse还是Qt Creator?
yanfengim 2010-11-10
  • 打赏
  • 举报
回复
定义中const QString cStrFontLu= "路";
这个类的文件编码格式也是GB2312的
哈几油 2010-11-10
  • 打赏
  • 举报
回复
定义中const QString cStrFontLu= "路";
的文件本身编码是什么?
hi_52rock 2010-11-10
  • 打赏
  • 举报
回复
QString str=QObject::tr("哈哈");
dbzhang800 2010-11-10
  • 打赏
  • 举报
回复
1. 什么系统?编码是 gb2312 还是 utf8
2. 什么样的乱码,是编码问题还是字体问题?
dbzhang800 2010-11-10
  • 打赏
  • 举报
回复
如果是全局变量,确实会有问题,问题是根据楼主的帖子,你并不能判断出它是全局变量。

其实判断是不是这儿的编码问题,很简单,只需要输出字符串的长度,看看是"1"(正确)、"2"、还是"3"就行了。

另外,给你个测试程序:

#include <QtCore>

class A
{
public:
A()
{
const QString cs= "测试";
m_cs = cs;
}
QString m_cs;
};

const QString gcs= "测试";
int main(int argc, char**argv)
{
QCoreApplication app(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
const QString cs= "测试";
QString s= "测试";
A a;

qDebug()<<gcs.length()<<cs.length()<<s.length()<<a.m_cs.length();

return app.exec();
}

另外,可以看看:
http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 deyili 的回复:]

给LZ:
因为定义全局常量: const QString cStrFontLu= "路"; 这行先执行。
QTextCodec::setCodecForTr(codec); 这行后执行。
[/Quote]
QTextCodec::setCodecForCStrings(codec);
这行
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
把 const QString cStrFontLu= "路";
改成:
const char* cStrFontLu= "路";
就OK了!
奔跑吧猴哥 2010-11-10
  • 打赏
  • 举报
回复
给LZ:
因为定义全局常量: const QString cStrFontLu= "路"; 这行先执行。
QTextCodec::setCodecForTr(codec); 这行后执行。
dbzhang800 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yanfengim 的回复:]

你们说怎么设置吧
[/Quote]
没什么可说的. 估计问题不在你贴出的代码中。或许你可以用下面的代码来试试。亦或者提供更多信息

const QString cStrFontLu= QString::fromUtf8("\xe6\x88\x91\xe6\x98\xaf\xe6\xb1\x89\xe5\xad\x97");

yanfengim 2010-11-10
  • 打赏
  • 举报
回复
你们说怎么设置吧

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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