2014-01-27 40 views
3

我試圖讓在運行時心臟字符的具體數目,使用此代碼:的iOS stringByPaddingToLength失敗,心臟性格

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=❤︎❤︎ 

所有其它字符除了我嘗試過的心(❤︎)之外,還會產生預期的結果(在這種情況下是一串四顆心)。我可以使用其他技術來獲得我想要的輸出,但是這種方法會產生非常奇怪的結果。例如,如果我要求三個字符的字符串並將結果顯示爲按鈕標籤,則會看到兩顆心,一顆黑色和一顆紅色(!)

這裏可能會發生什麼?

回答

4

字形字符(❤︎)您已經使用是由兩個Unicode字符(\u2764\ufe0e),所以兩個心在(padded=❤︎❤︎)顯示是正確的,並代表填充長度4四個字符。

其他簡單字符如"k"由一個unicode字符組成,所以它出現四次,填充長度爲4

這個心臟字符(❤)由一個Unicode字符(\u2764)組成,所以如果你使用這個,那麼四個心臟將顯示填充長度4

您也可以如下代碼:

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

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

UPDATE意見後:不知道的簡單的方法,但我用下面的代碼的特殊字符以查看它的Unicode:

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

謝謝。你知道如何輕鬆查看角色的unicode表示嗎? – robert

+0

不知道簡單的方法,但我使用下面的代碼來查看它的unicode特殊字符:NSData * data = [@「❤︎」dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@「%@」,str); – san

+0

真棒,多麼有用的片段。我花了很長時間才弄清楚這一點。 – robert