NewLife/X_NET20

修剪不可见字符。仅修剪ASCII,不包含Unicode
智能大石头 authored at 2023-03-09 08:19:44 大石头 committed at 2023-03-09 14:44:19
f62b2e3
Tree
1 Parent(s) dfd3381
Summary: 2 changed files with 33 additions and 3 deletions.
Modified +14 -3
Modified +19 -0
Modified +14 -3
diff --git a/NewLife.Core/Common/MachineInfo.cs b/NewLife.Core/Common/MachineInfo.cs
index 9ecd27f..d6f85b6 100644
--- a/NewLife.Core/Common/MachineInfo.cs
+++ b/NewLife.Core/Common/MachineInfo.cs
@@ -177,7 +177,18 @@ public class MachineInfo
             if (XTrace.Log.Level <= LogLevel.Debug) XTrace.WriteException(ex);
         }
 
-        // window+netcore 不方便读取注册表,随机生成一个guid,借助文件缓存确保其不变
+        // 裁剪不可见字符,顺带去掉两头空白
+        OSName = OSName.TrimInvisible()?.Trim();
+        OSVersion = OSVersion.TrimInvisible()?.Trim();
+        Product = Product.TrimInvisible()?.Trim();
+        Processor = Processor.TrimInvisible()?.Trim();
+        UUID = UUID.TrimInvisible()?.Trim();
+        Guid = Guid.TrimInvisible()?.Trim();
+        Serial = Serial.TrimInvisible()?.Trim();
+        Board = Board.TrimInvisible()?.Trim();
+        DiskID = DiskID.TrimInvisible()?.Trim();
+
+        // 无法读取系统标识时,随机生成一个guid,借助文件缓存确保其不变
         if (Guid.IsNullOrEmpty()) Guid = "0-" + System.Guid.NewGuid().ToString();
         if (UUID.IsNullOrEmpty()) UUID = "0-" + System.Guid.NewGuid().ToString();
 
@@ -488,7 +499,7 @@ public class MachineInfo
                 {
                     var key = line.Substring(0, p).Trim();
                     var value = line.Substring(p + 1).Trim();
-                    dic[key] = value;
+                    dic[key] = value.TrimInvisible();
                 }
             }
         }
@@ -647,7 +658,7 @@ public class MachineInfo
             foreach (var mo in moc)
             {
                 var val = mo?.Properties?[property]?.Value;
-                if (val != null) bbs.Add(val.ToString().Trim());
+                if (val != null) bbs.Add(val.ToString().TrimInvisible().Trim());
             }
         }
         catch (Exception ex)
Modified +19 -0
diff --git a/NewLife.Core/Extension/StringHelper.cs b/NewLife.Core/Extension/StringHelper.cs
index 425b9fc..3ef9ffb 100644
--- a/NewLife.Core/Extension/StringHelper.cs
+++ b/NewLife.Core/Extension/StringHelper.cs
@@ -466,6 +466,25 @@ namespace NewLife
             return str;
         }
 
+        /// <summary>修剪不可见字符。仅修剪ASCII,不包含Unicode</summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static String TrimInvisible(this String value)
+        {
+            if (String.IsNullOrEmpty(value)) return value;
+
+            var builder = new StringBuilder();
+
+            for (var i = 0; i < value.Length; i++)
+            {
+                // 可见字符。ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符
+                if (value[i] is > (Char)31 and not (Char)127)
+                    builder.Append(value[i]);
+            }
+
+            return builder.ToString();
+        }
+
         /// <summary>从字符串中检索子字符串,在指定头部字符串之后,指定尾部字符串之前</summary>
         /// <remarks>常用于截取xml某一个元素等操作</remarks>
         /// <param name="str">目标字符串</param>