iOS stringByPaddingToLength fails with heart character

glyph, ios, iphone, nsstring, unicode

Solution

The glyph character`(❤︎)` you have used is consists of two unicode characters`(\u2764\ufe0e),` so the two hearts displaying in `(padded=❤︎❤︎)` are correct and represents four characters for padding length `4`.

Other simple characters like `"k"` consists of one unicode character so it appears four times with padding length `4`.

This heart character`(❤)` consists of one unicode character`(\u2764)`, so if you use this, then four hearts will be displayed with padding length `4`.

You can also code like:

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

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

UPDATE after comments: Not sure about the easy way but I use following code for special characters to view its unicode :

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

Problem

I'm trying to get a specific number of heart characters at runtime, using this code: ``` NSString *glyph = @"❤︎"; NSString *padded = [@"" stringByPaddingToLength:4 withString:glyph startingAtIndex:0]; NSLog(@"glyph=%@, padded=%@", glyph, padded); ``` which produces this output: ``` 2014-01-26 20:04:57.962 Machismo[31073:70b] glyph=❤︎, padded=❤︎❤︎ ``` All other characters besides heart(❤︎) that I've tried, do produce expected results (a string of four hearts in this case). I can use other techniques to get the output I want, but this method produces very strange results. For example, if I request a three-character string and display the result as a button label, I see two hearts, one black and one red(!) What could possibly be going on here?

Original source