GBK转 QT的 Unicode

This commit is contained in:
DESKTOP-450PEFP\mainc 2026-05-16 14:19:25 +08:00
parent 099c3c6024
commit bac55473dc
2 changed files with 28 additions and 1 deletions

View File

@ -1083,7 +1083,34 @@ bool IsFiniteNumber(float v)
return false; return false;
} }
bool isAlreadyUTF8(const QString& str) {
// 检查是否包含常见的 GBK 乱码特征
// GBK 乱码通常是大量 ASCII 字符范围内但无意义的字符
// 方法1检查是否包含替换字符 (U+FFFD)
if (str.contains(QChar::ReplacementCharacter)) {
return false; // 包含替换字符,说明之前转换可能有问题
}
// 方法2检查字符是否都在合法的 Unicode 范围
for (const QChar& ch : str) {
if (ch.unicode() < 0x20 && ch.unicode() != 0x0A && ch.unicode() != 0x0D) {
// 存在不可打印字符,可能是误转换
return false;
}
}
return true;
}
QString GBKToUTF8(const QByteArray& gbkData) { QString GBKToUTF8(const QByteArray& gbkData) {
if (isAlreadyUTF8(gbkData))
{
return gbkData;
}
QTextCodec* gbkCodec = QTextCodec::codecForName("GBK"); QTextCodec* gbkCodec = QTextCodec::codecForName("GBK");
if (!gbkCodec) { if (!gbkCodec) {
return QString(); return QString();

View File

@ -549,7 +549,7 @@ void QtProjectWidgets::loadWellTree(QTreeWidgetItem *parent, QString fileFull, Q
short Attribute=0,SubAttribute=0; short Attribute=0,SubAttribute=0;
logio->GetObjectAttribute(i,&Attribute,&SubAttribute); logio->GetObjectAttribute(i,&Attribute,&SubAttribute);
QString strCurveName = QString::fromLocal8Bit(curvename); QString strCurveName = GBKToUTF8(curvename);// QString::fromLocal8Bit(curvename);
if(curvetype>CARD_OBJECT || 0 == curvetype) if(curvetype>CARD_OBJECT || 0 == curvetype)
{ {
qDebug() << "strCurveName: " << strCurveName; qDebug() << "strCurveName: " << strCurveName;