Re: Problem with rangeOfString and Umlauts
Re: Problem with rangeOfString and Umlauts
- Subject: Re: Problem with rangeOfString and Umlauts
- From: Matt Jacobson via Cocoa-dev <email@hidden>
- Date: Fri, 11 Mar 2022 12:35:14 -0500
> On Mar 11, 2022, at 12:17 PM, Gabriel Zachmann via Cocoa-dev
> <email@hidden> wrote:
>
>
> Well, SSIA.
> In more detail, I've got two strings:
>
> file_basename = @"Morgendämmerung (1)"
> info_item = @"Morgendämmerung"
>
> This code
>
> NSString * prefix = [ info_item commonPrefixWithString: file_basename
> options: NSCaseInsensitiveSearch ];
> unsigned int prefix_len = (unsigned int) [prefix length];
>
> yields prefix_len = 15
> as it should.
>
> The problem arises with this line of code:
>
> NSRange space_in_filename = [file_basename rangeOfString: @" " options:
> NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch|NSWidthInsensitiveSearch];
>
> which yields space_in_filename.location = 16 !
>
> This thwarts the rest of the code, which, in this case, would expect
> space_in_filename.location = 15.
>
> Needless to say that with strings that do not contain Umlauts, the call of
> rangeOfString:options: works as expected, i.e., in the above example
> space_in_filename.location is as expected (i.e., first character has
> location=0).
>
> I have also tried localizedStandardRangeOfString, with the same effect.
>
> Any ideas what I can do?
It’s hard to tell from the above snippet, but I suspect your strings are
different in normalization. Specifically, I suspect that file_basename uses
two Unicode codepoints for the ä, and info_item uses only one.
As an experiment, try running both strings through
-precomposedStringWithCanonicalMapping before doing your comparisons. This
method returns a new precomposed string—it doesn’t alter the receiver.
Matt
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden