GBK转utf8
QString GBK2UTF8(QByteArray& inStr)
{
QTextCodec* gbk = QTextCodec::codecForName("gbk");
QTextCodec* utf8 = QTextCodec::codecForName("UTF-8");
char* p = inStr.data();
QString str = gbk->toUnicode(p);
QByteArray utf8_bytes = utf8->fromUnicode(str);
p = utf8_bytes.data();
str = p;
return str;
}
//使用示例
//std::string test("中文");
//QByteArray qbyte = QByteArray::fromStdString(test);
//QString result = GBK2UTF8(qbyte);
utf8转GBK
QString UTF82GBK(QByteArray &inStr)
{
QTextCodec *gbk = QTextCodec::codecForName("gbk");
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
char *p = inStr.data();
QString str = utf8->toUnicode(p);
QByteArray utf8_bytes=gbk->fromUnicode(str);
p = utf8_bytes.data();
str = p;
return str;
}
//使用示例
//std::string test(u8"中文");
//QByteArray qbyte = QByteArray::fromStdString(test);
//QString result = UTF82GBK(qbyte);
是否为UTF8编码
bool IsUTF8(const void* pBuffer, long size)
{
bool IsUTF8 = true;
unsigned char* start = (unsigned char*)pBuffer;
unsigned char* end = (unsigned char*)pBuffer + size;
int count = 0;
while (start < end)
{
if (*start < 0x80) // (10000000): 值小于0x80的为ASCII字符
{
start++;
count++;
}
else if (*start < (0xC0)) // (11000000): 值介于0x80与0xC0之间的为无效UTF-8字符
{
IsUTF8 = false;
break;
}
else if (*start < (0xE0)) // (11100000): 此范围内为2字节UTF-8字符
{
if (start >= end - 1)
break;
if ((start[1] & (0xC0)) != 0x80)
{
IsUTF8 = false;
break;
}
start += 2;
count++;
}
else if (*start < (0xF0)) // (11110000): 此范围内为3字节UTF-8字符
{
if (start >= end - 2)
break;
if ((start[1] & (0xC0)) != 0x80 || (start[2] & (0xC0)) != 0x80)
{
IsUTF8 = false;
break;
}
start += 3;
count++;
}
else
{
IsUTF8 = false;
break;
}
if(count>2){
break;
}
}
return IsUTF8;
}
std::string转std::wstring
QString::fromStdString(name).toStdWString()
//通过QString 做为桥梁可以实现
std::string转WCHAR*
const_cast<WCHAR*>(QString::fromStdString(name).toStdWString().c_str())
//通过QString 做为桥梁可以实现
std::wstring转std::string
QString::fromStdWString(name).toStdString()
//通过QString 做为桥梁可以实现