2012-12-22 52 views
3

我有一個包含通過表情符號在代碼中NSString的按以下格式的NSArray:的NSString使用表情符號

0x1F463

如何我現在可以將它們轉換成的NSString與正確的格式?

用這種方法我能夠產生一個「繪文字」 -NSString:

NSString *emoji = [NSString stringWithFormat:@"\U0001F463"]; 

但是這是唯一可能與不變NSString的。我怎樣才能轉換整個NSArray?

+0

'-stringWithFormat:'不是*生成*任何東西 - 你自己正在做的是你正在餵它的字符串常量。 (不要說你濫用了'-stringWithFormat':不管怎麼說,你都沒有提供一個格式化字符串。)我不明白你陣列中的字符串有什麼問題。他們爲什麼不像現在這樣工作? – trudyscousin

+0

我必須將字符串「0x1F463」轉換爲「\ U0001F463」才能找到表情符號的Unicode字符。但我從外部plist得到NSArray – patrickS

+0

所以你說你的數組包含*字面*包含「0x1F463」的字符串,對嗎? – trudyscousin

回答

4

不是我最好的作品,但它似乎工作:

for (NSString *string in array) 
{ 
    @autoreleasepool { 
     NSScanner *scanner = [NSScanner scannerWithString:string]; 
     unsigned int val = 0; 
     (void) [scanner scanHexInt:&val]; 
     NSString *newString = [[NSString alloc] initWithBytes:&val length:sizeof(val) encoding:NSUTF32LittleEndianStringEncoding]; 
     NSLog(@"%@", newString); 
     [newString release]; // don't use if you're using ARC 
    } 
} 

使用您的採樣值四個數組,我得到4對赤腳。

+0

作品非常感謝! – patrickS

+0

不客氣! – trudyscousin

2

你可以這樣說:

NSString *str = @"0001F463"; 
// Convert the string representation to an integer 
NSScanner *hexScan = [NSScanner scannerWithString:str]; 
unsigned int hexNum; 
[hexScan scanHexInt:&hexNum]; 
// Make a 32-bit character from the int 
UTF32Char inputChar = hexNum; 
// Make a string from the character 
NSString *res = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding]; 
// Print the result 
NSLog(@"%@", res);