NSString stringWithFormat 不适用于货币符号等特殊字符



最近我对NSStringstringWithFormat:方法有很多麻烦。我写了一个对象,允许您将 N 行文本(用换行符分隔)居中、右对齐或左对齐。我的逻辑核心是NSStringstringWithFormat。我使用此函数在各个行的左侧或右侧用空格填充字符串,以产生我想要的对齐方式。下面是一个示例:

NSString *str = @"$3.00" --> 3 dollars
[NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> "   $3.00"

如您所见,上面的示例效果很好,我在左侧填充了 3 个空格,生成的文本是右对齐/对齐的。当我开始传入外币符号时,问题开始出现,直接格式化不起作用。它要么添加额外的符号,要么只是返回垃圾。

NSString *str = @"Kč1.00" --> 3 Czech Koruna (Czech republic's currency)
[NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> "  Kč1.00"

以上是完全错误的...现在我不是字符串编码专家,但我知道NSString使用国际标准化的Unicode编码来处理基本ASCII域之外的特殊字符。

如何解决我的问题?我应该使用什么编码?我尝试了许多不同的编码枚举,我已经数不清了,从NSMACOSRomanEncodingNSUTF32UnicodeBigEndian......我最后的手段是完全放弃使用stringWithFormat,也许它只适用于简单的UTF8Strings和基本符号。

如果你想表示货币,如果你使用带有货币样式(NSNumberFormatterCurrencyStyle)的NSNumberFormatter会好得多。它读取当前区域设置并基于它显示货币。您只需要询问其字符串表示形式并附加到字符串中即可。这将比管理 unicode 格式容易得多,请在此处查看教程

这将为您提供所需的结果

 NSString *str = @"Kč1.00";
str=[NSString stringWithFormat:@"%@%8@",[@" " stringByPaddingToLength:3    withString:@" " startingAtIndex:0],str];

输出 : @" Kč1.00";

还有一个技巧来实现这一点 -如果您喜欢使用它:)

[NSString stringWithFormat:@"%8s%@",[@"" cStringUsingEncoding:NSUTF8StringEncoding],str]; 

这也行得通。

最新更新