点网字符串搜索的歧义性netcore31 vs net47 vs roslyn

问题描述

我发现在某些情况下string.IndexOf()在搜索双换行符\ r \ n \ r \ n时返回-1,后跟0xCC(204)字节序列(也可能是其他字符串,避风港)未选中)。以下是dotnetfiddle示例-可以在此处选择编译器。在netcore31编译器上,始终在其他编译器上找到该字符串,只有在不跟随0xCC序列时才可以找到该字符串。有人可以解释吗?

https://dotnetfiddle.net/ZMW7tL

编辑:当我在最后一个\ r \ n之后放置0xCB或0xCD时,也会发生同样的情况。

小提琴的源代码

using System;
                
public class Program
{
    public static void Main()
    {
        var x = new byte[] { 99,108,111,115,101,13,10,204,159,67,4 };
        var z = System.Text.Encoding.UTF8.GetString(x);
        Console.WriteLine(z);
        Console.WriteLine();
        var idx = z.IndexOf("\r\n\r\n");
        Console.WriteLine("index = " + idx);
        Console.WriteLine("=========================");
 
        var x1 = new byte[] { 99,5,4 };
        var z1 = System.Text.Encoding.UTF8.GetString(x1);
        Console.WriteLine(z1);
        Console.WriteLine();
        var idx1 = z1.IndexOf("\r\n\r\n");
        Console.WriteLine("index modified = " + idx1);
        Console.WriteLine("=========================");
 
        var x2 = new byte[] { 13,159 };
        var z2 = System.Text.Encoding.UTF8.GetString(x2);
        Console.WriteLine(z2);
        Console.WriteLine();
        var idx2 = z2.IndexOf("\r\n\r\n");
        Console.WriteLine("index short = " + idx2);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)