转载自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();
}
结果:
搜索
复制