Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下;但是如果设置了全局的utf-8,再用以前的方法: QByteArray ba=aaa.toLatin1(); const char *c_str = ba.data(); PS:c_str所指向的内存单元,如果你想长时间使用你应该复制出来,要不可能过数行代码后,你再读你的数据,c_str所指向的内存单元就不是你以前读的内容了。函数返回的指针临时变量,不能长时间使用!!!!!!!
具体代理在本贴最后补充出来:
转码是件很复杂的事。
以下是在网上找的,感觉很好,可以一块理解: 这个好像就是用几种不同的字符,但不会出错,不像我们一种都搞不定 http://hi.baidu.com/codeworkman/blog/item/5c0d7516c5c03215c83d6dcc.html
Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK #include <QFile> void MainWindow::on_pushButton_clicked() /* 用windows记事本分别创建4种文件,本例可直接打开 QString转char*的规则同上; */ /* 如下使用想要得到正确结果必须使用类似以上的语句 但以下这个可以直接使用 ui->list->addItem(QString::fromLocal8Bit("--------显示中文----------")); QString strFileName = QFileDialog::getOpenFileName(this, tr("OpenFile"), ".", tr("Image Files(*.*)")); // 打开文件 // 读文件 if(fileSize < 4) QString strText;
ui->list->addItem(tr("ANSI")); ui->list->addItem(strText); QString strMsg, strTmp; //转unicode
// 转uft8 ui->list->addItem(tr(" ")); 以下这个我认为是中文字符的深入理解吧: http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
2010-07-11 17:04
最后是简单的编程上的类型转换,就是具体方法的应用: http://blog.csdn.net/ghostyu/article/details/6998640
char * 与 const char *的转换
char *ch1="hello11"; const char *ch2="hello22"; ch2 = ch1;//不报错,但有警告 ch1 = (char *)ch2; char 转换为 QString
其实方法有很多中,我用的是:
char a='b'; QString str; str=QString(a); QString 转换为 char 方法也用很多中 QString str="abc"; char *ch; ch = str.toLatin1.data(); QByteArray 转换为 char * char *ch;//不要定义成ch[n]; QByteArray byte; ch = byte.data(); char * 转换为 QByteArray char *ch; QByteArray byte; byte = QByteArray(ch); QString 转换为 QByteArray QByteArray byte; QString string; byte = string.toAscii(); QByteArray 转换为 QString QByteArray byte; QString string; string = QString(byte); 这里再对这俩中类型的输出总结一下: qDebug()<<"print"; qDebug()<<tr("print"); qDebug()<<ch;(ch 为char类型) qDebug()<<tr(ch); qDebug()<<byteArray;(byteArray是QByteArray类型) qDebug()<<tr(byteArray); qDebug()<<str;(str 为Qstring类型) 但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下: qDebug()<<tr(str.toLatin1); int 转 QString int a=10; QString b; b=QString::number(a) QString 转int QString a="120" int b; b=a.toInt() char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22"; ch2 = ch1;//不报错,但有警告 ch1 = (char *)ch2; char 转换为 QString 其实方法有很多中,我用的是: char a='b'; QString str; str=QString(a); QString 转换为 char 方法也用很多中 QString str="abc"; char *ch; ch = str.toLatin1.data(); QByteArray 转换为 char * char *ch;//不要定义成ch[n]; QByteArray byte; ch = byte.data(); char * 转换为 QByteArray char *ch; QByteArray byte; byte = QByteArray(ch); QString 转换为 QByteArray QByteArray byte; QString string; byte = string.toAscii(); QByteArray 转换为 QString QByteArray byte; QString string; string = QString(byte); 这里再对这俩中类型的输出总结一下: qDebug()<<"print"; qDebug()<<tr("print"); qDebug()<<ch;(ch 为char类型) qDebug()<<tr(ch); qDebug()<<byteArray;(byteArray是QByteArray类型) qDebug()<<tr(byteArray); qDebug()<<str;(str 为Qstring类型) 但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下: qDebug()<<tr(str.toLatin1); int 转 QString int a=10; QString b; b=QString::number(a) QString 转int QString a="120" int b; b=a.toInt() 另一个 1 QString --> string QString.toStdString(); 2 string --> QString QString::fromStdString(string) 3 QString --->int,double,char * QString::toInt() QString::toDouble() QString.toStdString().c_str(); 4 int double char* --->string 可以采用<sstream>里的stringstream 以int 为例,int a = 3; stringstream ss; string strInt; ss<<a; ss>>strInt; 开始时所 说的病例程序: 背景都是红色的代码作用是相同的,但打出的结果不一样,后面一个出不了正确的信息,这就是为什么开始说的临时变量不能长时间使用
|
|