【问题标题】:iOS stringByPaddingToLength fails with heart characteriOS stringByPaddingToLength 因心脏字符而失败
【发布时间】:2014-01-27 04:46:17
【问题描述】:

我正在尝试使用以下代码在运行时获取特定数量的心形字符:

NSString *glyph = @"❤︎";
NSString *padded = [@"" stringByPaddingToLength:4 withString:glyph startingAtIndex:0];
NSLog(@"glyph=%@, padded=%@", glyph, padded);

产生这个输出:

2014-01-26 20:04:57.962 Machismo[31073:70b] glyph=❤︎, padded=❤︎❤︎

除了我尝试过的 heart(❤︎) 之外的所有其他字符,都会产生预期的结果(在这种情况下是一串四颗心)。我可以使用其他技术来获得我想要的输出,但是这种方法会产生非常奇怪的结果。例如,如果我请求一个三字符的字符串并将结果显示为按钮标签,我会看到两颗心,一颗黑色和一颗红色(!)

这里可能发生了什么?

【问题讨论】:

    标签: ios iphone unicode nsstring glyph


    【解决方案1】:

    您使用的字形字符(❤︎) 由两个unicode 字符(\u2764\ufe0e), 组成,因此(padded=❤︎❤︎) 中显示的两颗心是正确的,表示填充长度4 的四个字符。

    "k" 等其他简单字符由一个 Unicode 字符组成,因此它出现四次,填充长度为 4

    这个心形字符(❤)由一个unicode字符(\u2764)组成,所以如果你使用它,那么将显示四个心形,填充长度为4

    你也可以这样写:

    NSString *glyph = @"\u2764"; //for NSString *glyph = @"❤";
    
    NSString *glyph = @"\u2764\ufe0e"; //for NSString *glyph = @"❤︎";
    

    cmets 后更新:不确定简单的方法,但我使用以下特殊字符代码来查看其 unicode:

    NSData *data = [@"❤︎" dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", str);
    

    【讨论】:

    • 谢谢。你知道如何轻松查看字符的 unicode 表示吗?
    • 不确定简单的方法,但我使用以下特殊字符代码来查看其 unicode: NSData *data = [@"❤︎" dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *str = [[NSString alloc] initWithData:数据编码:NSUTF8StringEncoding]; NSLog(@"%@", str);
    • 太棒了,多么有用的 sn-p。我需要很长时间才能弄清楚。
    猜你喜欢
    • 2014-10-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多