Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

string

c#

.net-5

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"));
like image 902
Gaz83 Avatar asked Sep 24 '21 11:09

Gaz83


People also ask

What does Startswith mean in Python?

The startswith() method returns True if the string starts with the specified value, otherwise False.

Can I use string Startswith?

JavaScript String startsWith() The startsWith() method returns true if a string starts with a specified string. Otherwise it returns false . The startsWith() method is case sensitive.

How do I check if a string starts with Python?

Python String startswith() method returns True if a string starts with the specified prefix(string). If not, it returns False.

What does Startswith return in C#?

In C#, StartsWith() is a string method. This method is used to check whether the beginning of the current string instance matches with a specified string or not. If it matches then it returns the string otherwise false.


1 Answers

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.
like image 82
2 revs Avatar answered Oct 16 '22 22:10

2 revs