>

fredag 31 maj 2013

Trim funktionen ger inte samma resultat som tidigare

Microsoft ändrar tyvärr på vissa saker i nya versioner av frameworket, funktionerna Trim, TrimStart och TrimEnd är en sådan. I framework 3.5 SP1 och tidigare använde funktionerna en lista med vilka tecken som skulle tas bort medans i framework 4 och 4.5 används internt funktionen IsWhiteSpace från Char. Detta resulterar i att de senare versionen inte tar bort tecknen “zero width space” (200B) och “zero width no-break space” (FEFF). Båda är icke synliga men gör stor skillnad i en sträng jämförelse där alla tecken jämförs.

Lika så i framework 3.5 SP1 och tidigare fanns tre tecken som inte togs bort: “mongolian vowel separartor” (180E), “narrow no-break space” (202F) och “medium mathematical space” (205F).

Får du problem med detta i uppgraderad kod föreslår jag lösningen där du först kör trim följt av en borttagning av de två tidigare exkluderade tecknen:

myString.Trim().Trim(new[] { '\uFEFF', '\u200B' });

källa: http://msdn.microsoft.com/en-us/library/t97s7bs3.aspx

Inga kommentarer:

Skicka en kommentar