需要理解为什么 string.StartsWith() 应该是 false 时却是 true

Gaz*_*z83 17 c# string .net-5

所以我有通过 ftp 下载的这个文件。该文件只是我工作的公司系统的配置文件。下载文件后,我打开文件并处理文件。文件处理的一部分是检查一行是否以 Unicode 字符开头\u001a

这就是我感到困惑的地方,因为.StartsWith("\u001a")总是如此true,但我不明白为什么。如果我在 Notepad++ 或十六进制编辑器中查看该文件,我只是看不到该文件。

所以我在这里缺少一些东西。

这是一个最小的例子(fiddle):

// prints True in .NET 5
Console.WriteLine("Hello".StartsWith("\u001a"));
Run Code Online (Sandbox Code Playgroud)

Mag*_*ron 9

这是因为.NET 5 中的全球化 API 发生了重大变化。您可以选择以下方法之一

  1. 使用StringComparison.OrdinalOrdinalIgnoreCase
  2. 通过以下方式之一使用 NLS 代替 ICU :
  • 在项目文件中:
<ItemGroup>
  <RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
  • 在runtimeconfig.json文件中:
{
  "runtimeOptions": {
     "configProperties": {
       "System.Globalization.UseNls": true
      }
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 通过将环境变量设置DOTNET_SYSTEM_GLOBALIZATION_USENLS为值true1.