【问题标题】:GetBytes() method returns different array for seemingly same stringsGetBytes() 方法为看似相同的字符串返回不同的数组
【发布时间】:2019-02-07 16:16:47
【问题描述】:

我有两个字符串 - 一个是从数据库中检索的,另一个是从网络上抓取的 - 然后将这两个字符串进行比较以检查是否有变化。

问题是这两个字符串看起来是相同的,这里: https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg

但是,当我在每个字符串上使用 Encoding.ASCII.GetBytes() 时,它们都返回两个不同的字节数组。

这可能是什么原因造成的?

【问题讨论】:

  • 它们是相同的字符串,并且它们产生相等的字节数组(至少,发布到 SO 的字符串是相同的):dotnetfiddle.net/IGnUEf。如果相同的代码使用您的字符串为您返回“False”,请在此处发布生成的字节数组。其中一个可能有一些不可见的字符,被 SO 删除了。
  • 数组有何不同?
  • 您是否可能无意中使用了两个数组的参考比较,而不是比较数组内的字节?
  • @Azhari 请编辑您的问题以包含您用于比较两个数组的代码
  • 请分享您在两个字符串上调用GetBytes 然后比较字节的实际代码。最好是可以粘贴到 dotnetfiddle 并直接运行的东西。

标签: c# arrays .net


【解决方案1】:

您发布的字符串确实相同,所以我认为问题出在其他地方。

我能想到两个可能的原因:

  1. 您没有以正确的方式比较两个数组,因此它们看起来不等于您。

    var bytes1 = Encoding.ASCII.GetBytes("https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg");
    var bytes2 = Encoding.ASCII.GetBytes("https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg");
    
    // This will only compare the Reference of both Arrays, not their content:
    var equals = bytes1.Equals(bytes2); // bytes1 == bytes2;
    
    // Compare them like this instead:
    var equals = bytes1.SequenceEqual(bytes2);
  2. 如果您从 API 或某些第三方接收字符串,可能会包含其他字符,例如 \0,这些字符对用户不可见,但会影响字节数组。

根据您提供的信息,我能想到的只有这两个原因。

【讨论】:

  • SequenceEqual 确实是我正在使用的:\
  • @Azhari 您能否使用您使用的代码更新您的原始问题。也许我们能够发现一些东西。
  • 我确实使用了与您发布的代码相同的代码。
  • @Azhari 如果您完全按照我的方式进行操作,它将起作用...您的字符串来自哪里,它们是用户输入的吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2016-01-08
相关资源
最近更新 更多