似乎所有字段都可以转换
non-breaking spaces
(nbsp,U+00A0)至
spaces
(U+0020)。这会导致编辑特定于区域设置的数字时出现问题。例如,在French/France语言环境中,不间断空格分隔1和%,形成“1%”。但是,由于UITextField将分隔符转换为空格,区域设置感知NSNumberFormatter无法解析区域设置字符串并将其转换为数字。
下面的代码片段说明了这个问题。
NSLocale *fr_FR = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease];
NSNumberFormatter *percentageFormatter = [[NSNumberFormatter alloc] init];
[percentageFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[percentageFormatter setGeneratesDecimalNumbers:TRUE];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[percentageFormatter setLocale:fr_FR];
NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithString:@"0.01"];
// will be "1 %" where the separator character is a nbsp (this is correct)
NSString *percentage = [percentageFormatter stringFromNumber:one];
UITextField *textField = [[UITextField alloc] init];
textField.text = percentage;
// will be "1 %" where the separator character is a space (this is wrong)
NSString *textFieldValue = textField2.text;
// returns an indeterminate value: may throw an exception, may return nil, etc
// this should return the number 0.01
NSNumber *percentageNumber = [percentageFormatter numberFromString:textFieldValue];
我的问题:如何防止UITextField将非中断空格转换为空格?