You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中短横线字符比较失败的原因及解决方案

解决PowerShell中短横线字符匹配失败的问题

问题根源

你遇到的是Unicode短横线字符混淆:

  • 你用来匹配的是普通减号(ASCII 45,Unicode U+002D)
  • 但$line[$i]中的是en dash(短破折号),Unicode码点为U+2013,这个字符的数值超过了单字节(Byte)的范围(0-255),所以转换时会报错。

验证方法

先确认目标字符的Unicode码点,明确差异:

# 获取$line[$i]的Unicode码点
[int]$line[$i]
# 输出应为8211(对应U+2013)

# 对比普通减号的码点
[int]'-'
# 输出45(U+002D)

解决方法

方法1:直接匹配目标Unicode字符

用对应码点的字符进行比较:

# 方式1:通过Unicode十六进制码点构造字符
$line[$i] -eq [char]0x2013

# 方式2:直接复制调试输出中的短破折号字符(即「–」)
$line[$i] -eq '–'

方法2:统一转换为标准减号

如果需要把所有类型的短横线统一为普通减号,用正则替换:

# 替换常见Unicode短横线(含U+2013、U+2014等)为普通减号
$normalizedLine = $line -replace '[\u2013\u2014\u2015]', '-'
# 之后即可用普通减号匹配
$normalizedLine[$i] -eq '-'

方法3:通过字符类别匹配

如果不确定具体是哪种短横线,可匹配Unicode中所有破折号类字符:

# 判断字符是否属于破折号标点类别
$isDash = [char]::GetUnicodeCategory($line[$i]) -eq [System.Globalization.UnicodeCategory]::DashPunctuation

内容的提问来源于stack exchange,提问作者Bbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:54:31