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

时间:2015-01-22 06:57:36

标签: ios objective-c unicode nsstring stringwithformat

我最近使用NSString的{​​{1}}方法遇到了很多麻烦。我编写了一个对象,允许您将N行文本(由新行分隔)对齐,无论是居中,右侧还是左侧。我的逻辑核心是stringWithFormat:的{​​{1}}。我使用这个函数来填充我的字符串,在各行的左边或右边用空格来产生我想要的对齐。这是一个例子:

NSString

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

stringWithFormat

上面的内容是错误的...现在我不是字符串编码专家,但我知道NSString *str = @"$3.00" --> 3 dollars [NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> " $3.00" 使用国际标准化的unicode编码来处理基本ASCII域以外的特殊字符。

如何解决问题?我应该使用什么编码?我已经尝试了很多不同的编码枚举,我已经失去了数量,从NSString *str = @"Kč1.00" --> 3 Czech Koruna (Czech republic's currency) [NSString stringWithFormat:@"%8s", [str cStringUsingEncoding:NSUnicodeStringEncoding]] --> returns --> " Kƒç1.00" NSString的所有内容。我最后的选择就是完全放弃使用stringWithFormat,也许它只适用于简单的UTF8Strings和基本符号。

3 个答案:

答案 0 :(得分:3)

如果您想要代表货币,如果您使用货币格式为NSNumberFormatterNSNumberFormatterCurrencyStyle),情况要好得多。它读取currentLocale并根据它显示货币。您只需要询问其字符串表示并附加到字符串。 这将比管理unicode格式容易得多,请查看教程here

答案 1 :(得分:1)

这将为您提供所需的结果

 NSString *str = @"Kč1.00";

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

Out Put:@“Kč1.00”;

答案 2 :(得分:0)

实现这一目标只需要一个技巧 - 如果你喜欢用它:)

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

这也可以。