NewLife/X

Merge branch 'master' of https://github.com/NewLifeX/X
石头 authored at 2026-03-28 15:30:25
6d59b0c
Tree
2 Parent(s) 46356f0 + 451faab
Summary: 1 changed files with 13 additions and 3 deletions.
Modified +13 -3
Modified +13 -3
diff --git a/NewLife.Core/Http/HttpHelper.cs b/NewLife.Core/Http/HttpHelper.cs
index 134f219..955c271 100644
--- a/NewLife.Core/Http/HttpHelper.cs
+++ b/NewLife.Core/Http/HttpHelper.cs
@@ -1,4 +1,4 @@
-using System.Net;
+using System.Net;
 using System.Net.Security;
 using System.Net.Sockets;
 using System.Net.WebSockets;
@@ -41,11 +41,21 @@ public static class HttpHelper
         {
             var aname = asm.GetName();
             var os = Environment.OSVersion?.ToString().TrimStart("Microsoft ");
+            var name = aname.Name;
+            
+            // 检查 name 是否只包含 ASCII 字符(纯 UTF8 单字节),如果包含非 ASCII 则进行 URL 编码保留中文
+            var hasNonAscii = !name.IsNullOrEmpty() && Encoding.UTF8.GetByteCount(name) != name.Length;
+            if (hasNonAscii)
+            {
+                // URL 编码非 ASCII 字符,如"测试" -> "%E6%B5%8B%E8%AF%95"
+                name = Uri.EscapeDataString(name);
+            }
+            
             // 仅当 OS 字符串为纯 UTF8 单字节(ASCII 子集)时附加,避免非 ASCII 引起的某些网关解析问题
             if (!os.IsNullOrEmpty() && Encoding.UTF8.GetByteCount(os) == os.Length)
-                DefaultUserAgent = $"{aname.Name}/{aname.Version} ({os})";
+                DefaultUserAgent = $"{name}/{aname.Version} ({os})";
             else
-                DefaultUserAgent = $"{aname.Name}/{aname.Version}";
+                DefaultUserAgent = $"{name}/{aname.Version}";
         }
     }