我最近使用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和基本符号。
答案 0 :(得分:3)
如果您想要代表货币,如果您使用货币格式为NSNumberFormatter
(NSNumberFormatterCurrencyStyle
),情况要好得多。它读取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];
这也可以。