Skip to content

[BUG] 含非 ASCII 字符的 Selector 策略组无法切换,返回 MihomoClientError 0 #344

Description

@Chichengmo

环境

  • ClashMac: 27.1.2
  • Mihomo: 1.19.29
  • macOS: 26.5 (25F71)

问题

select 策略组名称包含中文等非 ASCII 字符时,ClashMac 菜单和 ClashMacCLI select 都无法切换该组的节点。节点名称本身包含中文或 emoji 不影响切换。

相关但尚未定位到此条件的问题:#50#185

最小配置形态

proxy-groups:
  - name: "CrossWall (克洛斯)"
    type: select
    proxies:
      - "香港 A1"
      - "香港 A2"

上述节点对应正常可用的代理,省略具体服务器和凭据。

复现步骤

  1. 载入含上述策略组的有效配置并启动核心。

  2. 在状态栏菜单中将 CrossWall (克洛斯)香港 A1 切换到 香港 A2;界面选中项和实际策略均不改变。

  3. 通过 CLI 执行:

    /Applications/ClashMac.app/Contents/MacOS/ClashMacCLI \
      select 'CrossWall (克洛斯)' '香港 A2'

    返回:

    ❌ 未能完成操作。(ClashCoreKit.MihomoClientError错误0。)
    

对照实验

  1. 不改节点名,只把策略组名从 CrossWall (克洛斯) 改为 CrossWall,重载同一份配置。

  2. 菜单切换和下面的 CLI 命令均立即成功:

    /Applications/ClashMac.app/Contents/MacOS/ClashMacCLI \
      select 'CrossWall' '香港 A2'
  3. 在组名仍为 CrossWall (克洛斯) 时,直接调用 Mihomo Controller API,对组名做 URL path percent-encoding 后执行 PUT /proxies/{group},响应为 HTTP 204,节点也确实改变。

这说明配置和 Mihomo 核心可以处理该组名,问题应在 ClashMac / ClashCoreKit 构造或发送选择请求的路径中。建议检查 /proxies/{group} 的 URL path component 编码;这是基于对照实验的推断。

预期行为

策略组名包含中文、空格、括号等合法字符时,应与 ASCII 组名一样可从菜单和 CLI 切换;失败时也应返回 Controller 的具体状态码或响应内容,而不是笼统的 MihomoClientError 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions