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
- Use
StringComparison.Ordinal
orOrdinalIgnoreCase
- 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 valuetrue
or1
.