Ios 带UTF-8字符串的UITableView标头?
我正在使用Unix%s格式设置UITableView头的格式,因为目标C格式代码%@不处理填充(例如%20@%20s)。不幸的是,如果我有重音的外来字符,它们不会正确显示。“瞧”一词是这样出现的: 以下是生成表格标题的方法:Ios 带UTF-8字符串的UITableView标头?,ios,uitableview,Ios,Uitableview,我正在使用Unix%s格式设置UITableView头的格式,因为目标C格式代码%@不处理填充(例如%20@%20s)。不幸的是,如果我有重音的外来字符,它们不会正确显示。“瞧”一词是这样出现的: 以下是生成表格标题的方法: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { ... //NSString *tblHdr = [NSStrin
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
...
//NSString *tblHdr = [NSString stringWithFormat:@"%12s", @"voilà"];
NSString *tblHdr = [NSString stringWithFormat:@"%12s", [@"voilà" UTF8String]]; // Fixed example
...
return tblHdr;
}
[更新]
这是我项目中的实际代码。在我最初的示例中,我试图保持简单:
tblHdr = [NSString stringWithFormat:@"%-45s%12s%12s%35s",
[NSLocalizedString(@"Quiz Name", @"") UTF8String],
[NSLocalizedString(@"Correct", @"") UTF8String],
[NSLocalizedString(@"Missed", @"") UTF8String],
[NSLocalizedString(@"Score", @"") UTF8String]
];
NSString*tblHdr=[NSString stringWithFormat:@“%12s”,@“voilá”.UTF8String]代码>
这不起作用,因为%s在我看来没有多字节权限!?不确定
我会坚持下去。。。只需手动添加空格
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
//wrong
NSString *tblHdr = [NSString stringWithFormat:@"%12s", @"voilà".UTF8String];
NSLog(@"%@", tblHdr);
//ok
NSMutableString *rawTblHdr = @"voilà".mutableCopy;
while(12-rawTblHdr.length) {
[rawTblHdr insertString:@" " atIndex:0];
}
NSLog(@"%@", rawTblHdr);
}
}
#导入
int main(int argc,char*argv[]){
@自动释放池{
//错
NSString*tblHdr=[NSString stringWithFormat:@“%12s”,@“voilá”.UTF8String];
NSLog(@“%@”,tblHdr);
//嗯
NSMutableString*rawTblHdr=@“瞧”。mutableCopy;
而(12个图纸长度){
[rawTblHdr insertString:@“atIndex:0];
}
NSLog(@“%@”,rawTblHdr);
}
}
问题:%s格式化一个字符*,它是!=NSString。因此:
NSString*tblHdr=[NSString stringWithFormat:@“%12s”,@“voilá”.UTF8String]代码>
这不起作用,因为%s在我看来没有多字节权限!?不确定
我会坚持下去。。。只需手动添加空格
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
//wrong
NSString *tblHdr = [NSString stringWithFormat:@"%12s", @"voilà".UTF8String];
NSLog(@"%@", tblHdr);
//ok
NSMutableString *rawTblHdr = @"voilà".mutableCopy;
while(12-rawTblHdr.length) {
[rawTblHdr insertString:@" " atIndex:0];
}
NSLog(@"%@", rawTblHdr);
}
}
#导入
int main(int argc,char*argv[]){
@自动释放池{
//错
NSString*tblHdr=[NSString stringWithFormat:@“%12s”,@“voilá”.UTF8String];
NSLog(@“%@”,tblHdr);
//嗯
NSMutableString*rawTblHdr=@“瞧”。mutableCopy;
而(12个图纸长度){
[rawTblHdr insertString:@“atIndex:0];
}
NSLog(@“%@”,rawTblHdr);
}
}
似乎%s
格式要求在系统编码中使用C字符串,
所以这是有效的
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(CFStringGetSystemEncoding());
NSString *s = [NSString stringWithFormat:@"%12s", [@"voilá" cStringUsingEncoding:enc]];
(只要字符串可以在系统编码中表示)
否则,您可以手动填充字符串:
NSString *t = @"voilá";
if ([t length] < 12) {
t = [[@"" stringByPaddingToLength:(12 - [t length]) withString:@" " startingAtIndex:0] stringByAppendingString:t];
}
NSString*t=@“瞧”;
如果([t长度]<12){
t=[[@“stringByPaddingToLength:(12-[t length]),带有字符串:@“startingAtIndex:0]stringByAppendingString:t];
}
(或者使用@Daij Djan的方法,这是我写这篇文章时发布的)。似乎%s
格式要求在系统编码中使用C字符串,
所以这是有效的
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(CFStringGetSystemEncoding());
NSString *s = [NSString stringWithFormat:@"%12s", [@"voilá" cStringUsingEncoding:enc]];
(只要字符串可以在系统编码中表示)
否则,您可以手动填充字符串:
NSString *t = @"voilá";
if ([t length] < 12) {
t = [[@"" stringByPaddingToLength:(12 - [t length]) withString:@" " startingAtIndex:0] stringByAppendingString:t];
}
NSString*t=@“瞧”;
如果([t长度]<12){
t=[[@“stringByPaddingToLength:(12-[t length]),带有字符串:@“startingAtIndex:0]stringByAppendingString:t];
}
(或者使用@Daij Djan的方法,这是我写这篇文章时发布的)。以下是我真正的项目的样子:“%-45s%12s%12s%35s”。使用实空间是痛苦的。然后按照martin的建议,调用一个不推荐的方法:(sorry@Daij-Djan:不推荐使用的方法已被替换。啊,太酷了。我只尝试了使用UTF8编码的cStringUsingEncoding,这是毫无意义的。很好!这是我真正的项目的样子@“%-45s%12s%12s%35s”。使用实空间是痛苦的。然后按照martin的建议,调用一种不推荐的方法:( sorry@Daij-Djan:不推荐的方法已经被取代了。啊,酷。我只尝试了cStringUsingEncoding和UTF8编码,这是毫无意义的。很好!stringByPaddingToLength看起来比我的原始循环更适合stringByPaddingToLength看起来比我的原始循环更适合