diff --git a/common/geometryutils.cpp b/common/geometryutils.cpp index ed03dfa..bddbc04 100644 --- a/common/geometryutils.cpp +++ b/common/geometryutils.cpp @@ -1083,7 +1083,34 @@ bool IsFiniteNumber(float v) 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) { + + if (isAlreadyUTF8(gbkData)) + { + return gbkData; + } + QTextCodec* gbkCodec = QTextCodec::codecForName("GBK"); if (!gbkCodec) { return QString(); diff --git a/logPlus/qtprojectwidgets.cpp b/logPlus/qtprojectwidgets.cpp index 4adb5fc..c61de4c 100644 --- a/logPlus/qtprojectwidgets.cpp +++ b/logPlus/qtprojectwidgets.cpp @@ -549,7 +549,7 @@ void QtProjectWidgets::loadWellTree(QTreeWidgetItem *parent, QString fileFull, Q short Attribute=0,SubAttribute=0; logio->GetObjectAttribute(i,&Attribute,&SubAttribute); - QString strCurveName = QString::fromLocal8Bit(curvename); + QString strCurveName = GBKToUTF8(curvename);// QString::fromLocal8Bit(curvename); if(curvetype>CARD_OBJECT || 0 == curvetype) { qDebug() << "strCurveName: " << strCurveName;