修剪不可见字符。仅修剪ASCII,不包含Unicode智能大石头 authored at 2023-03-09 08:19:44 大石头 committed at 2023-03-09 14:44:19
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)
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>