Home > database >  Need understanding as to why string.StartsWith() is true when it should be false
Need understanding as to why string.StartsWith() is true when it should be false

Time:09-29

So I have this file that I download via ftp. The file is just a config file for a system at my company I work for. Once the file is downloaded I open the file and processor the file. Part of the processing of the file is to check to see if a line starts with a Unicode character \u001a.

This is where I am stumped because .StartsWith("\u001a") is always true, yet I cannot see why. If I view the file in Notepad or in a hex editor, I just don't see that.

So there is something I am missing here.

Here's a minimal example (fiddle):

// prints True in .NET 5
Console.WriteLine("Hello".StartsWith("\u001a"));

CodePudding user response:

It's because a breaking change in the globalizations APIs in .NET 5. You can choose one of the following approaches

  1. Use StringComparison.Ordinal or OrdinalIgnoreCase
  2. Use NLS instead of ICU, with one of the following ways:
  • In the project file:
<ItemGroup>
  <RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
  • In the runtimeconfig.json file:
{
  "runtimeOptions": {
     "configProperties": {
       "System.Globalization.UseNls": true
      }
  }
}
  • By setting the environment variable DOTNET_SYSTEM_GLOBALIZATION_USENLS to the value true or 1.
  • Related