Qt入门之utf8与unicode转换

来源:互联网 发布:我的淘宝店铺怎么登陆 编辑:程序博客网 时间:2024/04/27 12:45

一、几种编码的了解

参考博客http://blog.csdn.net/polarman/article/details/1593159


二、简单的认识下QByteArray、QString

QString的根本是QChar数组,但不以\0结尾,有大小 QChar的根本是ushor

QByteArray可以理解为Char型的动态数组,有大小,不是以\0结尾


三、了解QByteArray、QString、char 之间的转换

QString 转 char

QString str = "string";char *ch ;ch = str.toLocak8Bit().data();

QByteArray转char

char *ch;QByteArray byte;ch = byte.data();


四、了解QString与各编码之间的关系

QString本身是unicode编码,所以我们要将储存在char * 里的字符(可能是utf8或者是GB2312、latin-1)转化为QString,就要告诉

QString之间的编码方式是什么.有一下两种方法:

1、用QString自带的函数

QString fromAscii ( const char *str, intsize = -1 )

QString fromLatin1 ( const char *str, intsize = -1 )

QString fromLocal8Bit ( const char *str, intsize = -1 )

QString fromUtf8 ( const char *str, intsize = -1 )

2、用QTextCodec

QString QTextCodec::toUnicode ( const char *chars ) const


五、显示十六进制

1、QString QString::number ( int n, int base = 10 )

用法:QString::number(unidata[i].unicode(),16);

2、QByteArray toHex () const 


例子:

utf8转unicode

这里打开文件只是当时调试用的,无关紧要.

void MessageForm::sendMessage(){    QFile file(filename);    QTextCodec *codec = QTextCodec::codecForName("UTF8");    QString strout;    if ( file.open(QIODevice::WriteOnly) )    {        QTextStream ts(&file);        QString strdata = displayWindow->toPlainText();        QString unidata = codec->toUnicode(strdata.toUtf8().data());        for (int i=0; i<unidata.length(); ++i)        {            ushort num = unidata[i].unicode();            if (num < 255)                strout += "00";            strout += QString::number(num,16);        }            ts << strout;    }    file.close();}


结果:






0 0
原创粉丝点击