GetBytes()方法为看似相同的字符串返回不同的数组

时间:2019-02-07 16:16:47

标签: c# arrays .net

我有两个字符串-一个是从数据库中检索的,另一个是从Web上刮取的-然后将这两个字符串进行比较,以检查是否有更改。

问题在于两个字符串看似相同,在这里: https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg https://m.atcdn.co.uk/a/media/w267h200pdfdfdf/25bc7a46fdb6499db28370ab693f230c.jpg

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

可能是什么原因造成的?

1 个答案:

答案 0 :(得分:3)

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

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

  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之类的其他字符,这些字符对用户不可见,但会影响字节数组。

这是我可以根据您提供给我们的信息想到的仅有两个原因。