情况一
原因:编码不同
解决方法:
char local8BitArray[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
QString str = QString::fromLocal8Bit(local8BitArray);
情况二
原因:中文字符在不同编码中占用的字节数是不同的
解决方法:把单字节数组转成宽字节数组,再转成多字节字符串
int charArraySize = static_cast<int>(strlen(result->codes.codeArray[i]) + 1); // 加1为了包含结束符
int wcharSize = MultiByteToWideChar(CP_ACP, 0, result->codes.codeArray[i], charArraySize, NULL, 0);
WCHAR* wcharArray = new WCHAR[wcharSize];
int wcharLen = MultiByteToWideChar(CP_ACP, 0, result->codes.codeArray[i], charArraySize, wcharArray, wcharSize);
int len = WideCharToMultiByte(CP_ACP, 0, wcharArray, -1, NULL, 0, NULL, NULL);
char* buffer = new char[len];
int bufferLen = WideCharToMultiByte(CP_ACP, NULL, wcharArray, -1, buffer, len, NULL, NULL);
DWORD lastError = ::GetLastError();
QString test_code = QString(buffer);