//海军GBK编码
unsigned char str[5] = {0xBA, 0xA3, 0xBE, 0xFC};
QByteArray ba((char *)str, 4);
QTextCodec *codec = QTextCodec::codecForName("GBK");
QString string = codec->toUnicode(ba);
const QChar *data = string.data();
printf("codec->toUnicode: ");
for (int i=0; i<string.size(); i++) {
printf("%.2x ", data[i].unicode());
}
printf("\n");
QString utf8String = QString(string.toUtf8());
const QChar *utf8Data = utf8String.data();
printf("toUtf8: ");
for (int i=0; i<utf8String.size(); i++) {
printf("%.2x ", utf8Data[i].unicode());
}
printf("\n");
QString latin1String = QString(string.toLatin1());
const QChar *latin1Data = latin1String.data();
printf("toLatin1: ");
for (int i=0; i<latin1String.size(); i++) {
printf("%.2x ", latin1Data[i].unicode());
}
printf("\n");
QString local8BitString = QString(string.toLocal8Bit());
const QChar *local8BitData = local8BitString.data();
printf("toLocal8Bit without setCodecForLocale: ");
for (int i=0; i<local8BitString.size(); i++) {
printf("%.2hhx ", local8BitData[i].unicode());
}
printf("\n");
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QString local8BitUtf8String = QString(string.toLocal8Bit());
const QChar *local8BitUtf8Data = local8BitUtf8String.data();
printf("toLocal8Bit with setCodecForLocale UTF-8: ");
for (int i=0; i<local8BitUtf8String.size(); i++) {
printf("%.2x ", local8BitUtf8Data[i].unicode());
}
printf("\n");
QString local8BitUtf8String1 = QString::fromLatin1(string.toLocal8Bit());
const QChar *local8BitUtf8Data1 = local8BitUtf8String1.data();
printf("QString::fromLatin1(string.toLocal8Bit()): ");
for (int i=0; i<local8BitUtf8String1.size(); i++) {
printf("%.2hhx ", local8BitUtf8Data1[i].unicode());
}
printf("\n");
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QString local8BitGbkString = QString(string.toLocal8Bit());
const QChar *local8BitGbkData = local8BitGbkString.data();
printf("toLocal8Bit with setCodecForLocale GBK: ");
for (int i=0; i<local8BitGbkString.size(); i++) {
printf("%.2hhx ", local8BitGbkData[i].unicode());
}
printf("\n");
QString local8BitGbkString1 = QString::fromLatin1(string.toLocal8Bit());
const QChar *local8BitGbkData1 = local8BitGbkString1.data();
printf("QString::fromLatin1(string.toLocal8Bit()): ");
for (int i=0; i<local8BitGbkString1.size(); i++) {
printf("%.2hhx ", local8BitGbkData1[i].unicode());
}
printf("\n");
结果:
codec->toUnicode: 6d77 519b
toUtf8: 6d77 519b
toLatin1: 3f 3f
toLocal8Bit without setCodecForLocale: fd fd fd fd
toLocal8Bit with setCodecForLocale UTF-8: 6d77 519b
QString::fromLatin1(string.toLocal8Bit()): e6 b5 b7 e5 86 9b
toLocal8Bit with setCodecForLocale GBK: fd fd fd fd
QString::fromLatin1(string.toLocal8Bit()): ba a3 be fc