【发布时间】:2015-01-22 06:57:36
【问题描述】:
我最近在使用NSString 的stringWithFormat: 方法时遇到了很多麻烦。我编写了一个对象,它允许您将 N 行文本(由新行分隔)居中、右或左对齐。我逻辑的核心是NSString 的stringWithFormat。我使用此函数在各个行的左侧或右侧用空格填充我的字符串,以产生我想要的对齐方式。这是一个例子:
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 对基本 ASCII 域之外的特殊字符使用国际标准化 unicode 编码。
如何解决我的问题?我应该使用什么编码?我已经尝试了很多不同的编码枚举,我已经数不清了,从NSMACOSRomanEncoding 到NSUTF32UnicodeBigEndian.. 我最后的办法是完全放弃使用 stringWithFormat ,也许它只适用于简单的 UTF8Strings 和基本符号。
【问题讨论】:
-
您不会因此而走运。切换到 NSNumberFormatter。正是为此目的而设计的,包括覆盖货币为前缀和后缀的语言环境,包括否定的本地样式表示等。
-
是的,我想我只是要从使用 stringWithFormat 切换。谢谢
标签: ios objective-c unicode nsstring stringwithformat