赞
踩
gbk_utf_ansi_asc字符集分析字节序
字符集
●ASCII的7位字符集128个字符
●标准ASCII中最高位(b7)用作奇偶校验1个数
●IS0-8859-1 扩展ASCII 128-255拉丁
ANSI标准
●AmericanNational Standards Institute美国国家标准学会
●多字节字符集(MBCS , Multi- ByteChactacter Set)
●0到127之间的字符,依旧是1个字节代表1个字符
●(超出部分)2个字节来表示1个字符
GB2312 GBK编码
●ANSI编码6763常用汉字
●两个大于127的字符表示一个汉字
●GBK编码GB2312的扩展汉字21003个
UTF-8
●变长的编码方式
●单字节与ASCII码相同
●对于n字节的符号( n>1 )首字节前n位为1,n+ 1为0,后面字节前两位都为10
UTF-16 UTF-32
字节序BOM
●LE ( littleendian):小字节字节序低位在前
●0x001A23 低地址23 1A 00高地址
●BE ( big endian):大字节字节序
●BOM字节序标志头
●文本头FE FF是BE FF FE是LE
QString项目创建空和NULL判断
QString
●16-bit QChars ushort Unicode 4.0
封装了字符串处理功能
●空判断==' 'isNull isEmpty
●字符串拼接+=
●格式化字符串%1 %2 arg()
- #include <QCoreApplication>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QString str;
- if(str.isNull()) //判断是否为空
- {
- qDebug()<<"isNull"<<endl;
- }
- if(str.isEmpty())
- {
- qDebug()<<"isEmpty"<<endl;
- }
- str = "";
- if(str.isNull())
- {
- qDebug()<<"isNull2"<<endl;
- }
- if(str.isEmpty())
- {
- qDebug()<<"isEmpty2"<<endl;
- }
- QString str2;
- if(str2 == "")
- {
- qDebug()<<"str2 isNULL"<<endl;
- }
-
- QString str3 = "test1"; //拼接
- str3 += "test2";
- str3 += 'A';
- str3.append("test3");
- qDebug()<<str3;
-
- QString str4("test4");
- qDebug()<<str4;
-
- return a.exec();
- }
QString格式化字符串转换
- #include <QCoreApplication>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QString str;
- str = QString("name=%1 arg=%2 %3 %4 %5") //字符串拼接
- .arg("xiaoming")
- .arg(15)
- .arg(14.5)
- .arg(123,0,2) //数,宽度,2进制
- .arg(255,6,16) //数,宽度,16进制
- ;
- qDebug()<<str;
-
- QString num = QString::number(14); //数转字符串
- qDebug()<<num;
-
- int i = num.toInt(); //字符串转整数
- qDebug()<<"i="<<i;
- qDebug()<<"num double"<<num.toDouble();
-
- QString num2 = QString::number(15.6);
- qDebug()<<num2;
- qDebug()<<num2.toInt();
- qDebug()<<num2.toDouble();
-
- return a.exec();
- }
遍历字符串
- #include <QCoreApplication>
- #include <QDebug>
- #include <iostream>
- using namespace std;
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QString str = "xcjasd,asdasd{,[name],[id]},[name]},asda[name]}sdsa";
-
- ///
- //字符串遍历
- for(int i =0; i < str.size(); i++)
- {
- cout<<str[i].toLatin1();
- }
- cout<<endl;
- cout<<"========================\n";
- QString::iterator itr = str.begin();
- for(;itr!= str.end();itr++)
- {
- //(*itr).toLatin1();
- cout<<itr->toLatin1();
- }
- cout<<endl;
-
- ///
- //字符串查找
- QString key = "[name]";
- int pos = str.indexOf(key);
- cout<<"pos = "<<pos<<endl;
- int pos2 = str.indexOf(key,pos+key.size());//在某个位置之后,再查找
- cout<<"pos2 = "<<pos2<<endl;
- int pos3 = str.indexOf(key,pos2+key.size());
- cout<<"pos3 = "<<pos3<<endl;
- cout<<str.indexOf("tttt"); //找不到返回-1
- ///
- //字符串截取
-
- //str.chop(2);//去掉字符串最后两个字符
- qDebug()<<str;
-
- //取第一个{括号之前 012{56}9
- int bpos = str.indexOf("{");
- int epos = str.lastIndexOf("}");
- qDebug()<<str.left(bpos); //之前的几个字符
- //取最后一个}括号之后123456789
- qDebug()<<str.right(str.size()-epos-1);//之后的几个字符
- //取括号之间
- QString str2 = str;
- str2.chop(str.size()-epos); //截取
- qDebug()<<str2;
- qDebug()<<str2.right(epos-bpos-1);
-
- ///
- //字符串替换
- str.replace("[name]","xiaoming");
- str.replace("[id]","007");
- qDebug()<<str;
-
-
- ///
- //字符串切割 , csv
- QStringList list1 = str.split(",");
- cout<<"---------------------"<<endl;
- for(int i = 0; i<list1.size();i++)
- {
- qDebug()<<list1[i];
- }
-
- return a.exec();
- }#include <QCoreApplication>
- #include <QDebug>
- #include <iostream>
- using namespace std;
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QString str = "xcjasd,asdasd{,[name],[id]},[name]},asda[name]}sdsa";
-
- ///
- //字符串遍历
- for(int i =0; i < str.size(); i++)
- {
- cout<<str[i].toLatin1();
- }
- cout<<endl;
- cout<<"========================\n";
- QString::iterator itr = str.begin();
- for(;itr!= str.end();itr++)
- {
- //(*itr).toLatin1();
- cout<<itr->toLatin1();
- }
- cout<<endl;
-
- ///
- //字符串查找
- QString key = "[name]";
- int pos = str.indexOf(key);
- cout<<"pos = "<<pos<<endl;
- int pos2 = str.indexOf(key,pos+key.size());//在某个位置之后,再查找
- cout<<"pos2 = "<<pos2<<endl;
- int pos3 = str.indexOf(key,pos2+key.size());
- cout<<"pos3 = "<<pos3<<endl;
- cout<<str.indexOf("tttt"); //找不到返回-1
- ///
- //字符串截取
-
- //str.chop(2);//去掉字符串最后两个字符
- qDebug()<<str;
-
- //取第一个{括号之前 012{56}9
- int bpos = str.indexOf("{");
- int epos = str.lastIndexOf("}");
- qDebug()<<str.left(bpos); //之前的几个字符
- //取最后一个}括号之后123456789
- qDebug()<<str.right(str.size()-epos-1);//之后的几个字符
- //取括号之间
- QString str2 = str;
- str2.chop(str.size()-epos); //截取
- qDebug()<<str2;
- qDebug()<<str2.right(epos-bpos-1);
-
- ///
- //字符串替换
- str.replace("[name]","xiaoming");
- str.replace("[id]","007");
- qDebug()<<str;
-
-
- ///
- //字符串切割 , csv
- QStringList list1 = str.split(",");
- cout<<"---------------------"<<endl;
- for(int i = 0; i<list1.size();i++)
- {
- qDebug()<<list1[i];
- }
-
- return a.exec();
- }
QString正则表达式
- #include <QCoreApplication>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QString str = "xcxjxcxc123asdasdas 345 asdasd";
- int pos = str.indexOf(QRegExp("[0-9]+"));
- qDebug()<<pos<<endl;
- QString str2 = str;
- str2.replace(QRegExp("[0-9]+") ,"[num]");
- qDebug()<<str2<<endl;
- QStringList rlist = str.split(QRegExp("[0-9]+"));
-
- for(int i = 0; i < rlist.size(); i++)
- {
- qDebug()<<rlist[i];
- }
- return a.exec();
- }
Qt中文乱码问题在vs项目中显示中文
1:在vs下源码是gb2312的所以要转换。
- QApplication a(argc, argv);
- QString str = QStringLiteral("中文测试"); //QString 内部是utf-16 参数是utf-8 所以
- // QStringLiteral转成utf-8
- QMessageBox::information(0, "title", str);
2.解决办法
vs:文件-》高级保存-》
或者::::::这样
3.
- #include "vs_cn_codec.h"
- #include <QtWidgets/QApplication>
- #include <QDebug>
- #include <QMessageBox>
- #include <iostream>
- #include <QTextCodec>
- #include <windows.h>
- using namespace std;
-
- int main(int argc, char *argv[])
- {
- char *src = "元数据中文GBK";
- //元数据是gbk或者gb2312 多字节存入QString
- //本地编码方式 默认GBK
- QString str1 = QString::fromLocal8Bit(src); //本地的转成utf-8
- qDebug() << "str1 = " << str1;
-
- //把QString 转为gbk
- cout << str1.toLocal8Bit().toStdString() << endl; //cout用的是gbk
- //本地处理编码方式,默认是GBK,改为UTF-8
- //QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
-
- //win api调用qstring作为参数
- MessageBox(0, str2.toStdWString().c_str(), L"中文标题",0); //宽字符
-
- //vs_cn_codec w;
- //w.show();
- return a.exec();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。