.net core 文本比对的一个诡异设计
9-11 发现的,过久了都忘了,记一下
string s = Encoding.ASCII.GetString(new byte[] { 0x57, 00, 0x49, 00, 0x4e, 00, 0x44, 00, 0x4f, 0, 0x57, 0, 0x53, 0 }); // WINDOWS
int i = s.IndexOf("IN");
Console.WriteLine(i); // -1
在 .net framework, 得到的是 -1.
然而在 .net core,得到的是 2. 也就是说它在 ASCII 编码下对比忽略了 0。
后来翻阅源码找到了一个配置节
<InvariantGlobalization>true</InvariantGlobalization>
源码
然而这还是有问题的,启用这玩意后,CultureInfo.GetCultures(..) 得到的就只有一项了, Culture 功能完全废了。看来除了改源码也没什么好办法了。