C# Unicode 0xFFFD位于字符串中时的IndexOf匹配-错误或功能?

C# Unicode 0xFFFD位于字符串中时的IndexOf匹配-错误或功能?,c#,indexof,C#,Indexof,在VS2012的C#中,以下代码: string test = "[ " + (char)0xFFFD + " ]"; System.Console.WriteLine("{0}", test.IndexOf(" ") == 1); 结果是 True 打印到控制台输出窗口。空格之间用0xFFFD分隔,但它与两个连续的空格相匹配。这是预期结果/功能还是(已知)缺陷?这是预期结果。是Unicode中的“替换字符”,在任何文化中都没有意义。忽略搜索中的任何无意义字符: 字符集包括可忽略字符,这些

在VS2012的C#中,以下代码:

string test = "[ " + (char)0xFFFD + " ]";
System.Console.WriteLine("{0}", test.IndexOf("  ") == 1);
结果是

True
打印到控制台输出窗口。空格之间用
0xFFFD
分隔,但它与两个连续的空格相匹配。这是预期结果/功能还是(已知)缺陷?

这是预期结果。是Unicode中的“替换字符”,在任何文化中都没有意义。忽略搜索中的任何无意义字符:

字符集包括可忽略字符,这些字符在执行语言或文化敏感比较时不被考虑


因为比较字符串中有两个空格,所以这只是意外吗?您可能希望在演示中使用除空格以外的可见字符。为了简化您所拥有的内容,您的问题是为什么
“[\uFFFD]”“
包含
我在发布评论之前阅读了这些内容,但不确定FFFD是否可忽略。谢谢你的好消息!如果它是在可忽略的一组中,那不会被指出吗?@D Stanley:谢谢,我应该更仔细地阅读C#手册。IndexOf(…)的“奇怪行为”花费了我(相当)一些时间隔离和修复(替换为RegEx的Replace)随机循环,如下所示:
while(test.IndexOf(“”>=0)test=test.Replace(“,”)