两个不同长度的Powershell字符串被认为是相同的?

时间:2017-08-23 17:19:44

标签: string powershell hidden-characters

我发现PowerShell字符串有些不寻常...我希望这只是我所遗漏的东西。这是我找到的。

我从网页上复制了一些数据(如果有人关心,KQL会搜索O365),并且它包含隐藏的控制字符。以下是我将它们存储在PowerShell变量中的两行:

PS C:\Users> $L1 = "(c:c)(date=01/01/2014..11/01/2016)"
PS C:\Users> $L2 = "(c:c)‎‎(date=01/01/2014..11/01/2016)‎"

第二行在"(c:c)"之间有两个隐藏字符(Unicode字符8206)。和#34;(约会和#34;。我相信他们在这篇文章中仍然存在。因此,这两个字符串有不同的长度:

PS C:\Users> $L1.Length
34

PS C:\Users> $L2.Length
36

然而,当我检查它们是否彼此相等时,PowerShell告诉我它们是:

PS C:\Users> $L1 -eq $L2
True

现在,我知道它了解那里存在差异。我可以使用substring方法提取一些字符,并显示子字符串不相等:

PS C:\Users> $L1.Substring(4,8)
)(date=0

PS C:\Users> $L2.Substring(4,8)
)‎‎(date

如果我使用-eq运算符来比较这些子字符串,我会得到正确的答案:

PS C:\Users> $L1.Substring(4,8) -eq $L2.Substring(4,8)
False

但是如果我通过改变我抓取的字符数来强制字符串显示,那么我得到相同的6个可见字符,那么PowerShell会告诉我它们是相同的:

PS C:\Users> $L1.Substring(4,6)
)(date

PS C:\Users> $L2.Substring(4,8)
)‎‎(date

PS C:\Users> $L1.Substring(4,6) -eq $L2.Substring(4,8)
True

那么,这是预期的行为吗?我错过了什么吗?我编程的时间足够长,以至于我知道字符串处理可能很奇怪......但这超出了我的个人经验。

如果是预期的行为,如何正确比较两个字符串变量以查看它们是否完全相同?

0 个答案:

没有答案
相关问题