Qt入门之utf8与unicode转换

时间:2021-05-14 14:13:28

转载自http://m.blog.csdn.net/blog/u011791262/25040271

一、几种编码的了解

参考博客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, int size = -1 )

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

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

QString fromUtf8 ( const char *str, int size = -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

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

<pre code_snippet_id="327547" snippet_file_name="blog_20140505_3_8724804" name="code" class="cpp" style="border: 1px solid rgb(255, 255, 204); font-family: 'Courier New'; overflow: auto; background-color: rgb(255, 255, 252);">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();
}


结果: 

Qt入门之utf8与unicode转换