首页| 论坛| 消息

标题:QTextCodec::codecForName("GBK")应该返回什么?
作者:lx_bupt
日期:2006-05-27 23:15
内容:

我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
char *string = "a中文按钮a";
printf("%s\n",string);
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
printf("%s\n",gbk_codec);
QString gbk_string = gbk_codec->toUnicode(string);
printf("%s\n",&gbk_string);
QPushButton quit( gbk_string,0 );
quit.resize( 100, 50 );
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );
a.setMainWidget( &quit );
quit.show();
return a.exec();
}
以上是代码,第一行还可以打印出中文按钮4个字。到了printf("%s",gbk_codec)就是乱码了(这是否代表我没有得到GBK码?),至于printf("%s",&gbk_string)就更是乱码了。
请问printf("%s",gbk_codec)如果正确的话应该显示什么?我的问题怎么解决?


#1 [lx_bupt 05-27 23:54]
还有怎么能给一个QString类型的变量赋与一个字符串?
QString *a ="aaaa";这样肯定是不行的。
#2 [XChinux 05-28 08:15]
你用QTextCodec::codecForLocale()看看它的返回值是什么。
#3 [lx_bupt 05-28 14:25]
QTextCodec *locale_codec = QTextCodec::codecForLocale();
cout
#4 [浪漫天使 05-29 00:28]
引用第0楼lx_bupt于2006-05-27 23:15发表的“QTextCodec::codecForName("GBK")应该返回什么?”:
我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
char *string = "a中文按钮a";
.......
我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
………………
QApplication a( argc, argv );
char *string = "a中文按钮a";
printf("%s\n",string);
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
//这个返回的是一个类型为 QTextCodec 指针(QTextCodec*)的变量,就是说gbk_codec是指针变量,地址也!!所以打印就是地址值了。
printf("%s\n",gbk_codec);
QString gbk_string = gbk_codec->toUnicode(string);
//gbk_string 是一个 QString 类型的变量 就相当于 int i =1;
printf("%s\n",&gbk_string);
//printf里面的参数类型应该是char * 而你给了一个参数不是char *的。
//第二 &gbk_string,应该是一个取地址值的操作,所以打印就当然是gbk_string的地址值咯
………………
}
不明白的地方,请查阅相关书籍。
以下这个在windows 200 qt4.1.0开源版通过,运行正常显示中文,希望对你有帮助

#include
#include
#include
int main( int argc, char *argv[] )
{
QApplication a( argc, argv );
char *string = "a中文按钮a";
printf("%s\n",string);
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
// printf("%s\n",gbk_codec);
QString gbk_string = gbk_codec->toUnicode(string);
// printf("%s\n",&gbk_string);
QPushButton quit( gbk_string,0 );
quit.resize( 100, 50 );
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT( quit()) );
//a.setMainWidget( &quit );
quit.show();
return a.exec();
}
[/code ..

回复 发表
主题 版块