Ios NSString中的Unicode十六进制字符代码未显示

Ios NSString中的Unicode十六进制字符代码未显示,ios,objective-c,unicode,nsstring,Ios,Objective C,Unicode,Nsstring,我有从服务器请求收到的Unicode十六进制字符代码和#x1f682,我想将其转换为我的UILabel中的表情符号。我已经读过很多关于这个问题的帖子,但是没有一个解决方案是有效的 我读过关于解码HTML实体或将NSString设置为UFT8字符串的帖子,但这些都不起作用 NSString *unicode = @"Train &#x1f682"; self.label.text = [unicode stringByDecodingHTMLEntities]; <---- Does

我有从服务器请求收到的Unicode十六进制字符代码和#x1f682,我想将其转换为我的UILabel中的表情符号。我已经读过很多关于这个问题的帖子,但是没有一个解决方案是有效的

我读过关于解码HTML实体或将
NSString
设置为UFT8字符串的帖子,但这些都不起作用

NSString *unicode = @"Train &#x1f682";
self.label.text = [unicode stringByDecodingHTMLEntities]; <---- Doesn't work
NSString*unicode=@“Train🚂”;

self.label.text=[unicode StringByDecodingHtmlenties] 我使用以下方法使其工作:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.label.text = [self convertHexUnicodeString:@"This is a train &#x1f682 I like trains! &#x1f682"];

}

- (NSString *)convertHexUnicodeString:(NSString *)unicodeText {

    NSScanner *myScanner;
    NSString *text = nil;
    myScanner = [NSScanner scannerWithString:unicodeText];

    while ([myScanner isAtEnd] == NO) {

        [myScanner scanUpToString:@"&#x" intoString:NULL] ;
        [myScanner scanUpToString:@" " intoString:&text] ;
        unicodeText = [unicodeText stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@", text] withString:[self replaceHexUnicode:text]];
    }

    unicodeText = [unicodeText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    return unicodeText;
}

- (NSString *)replaceHexUnicode:(NSString *)text {

    text = [text substringFromIndex:3];

    unsigned unicodeInt = 0;
    [[NSScanner scannerWithString:text] scanHexInt:&unicodeInt];
    char chars[4];
    int len = 4;
    chars[0] = (unicodeInt >> 24) & (1 << 24) - 1;
    chars[1] = (unicodeInt >> 16) & (1 << 16) - 1;
    chars[2] = (unicodeInt >> 8) & (1 << 8) - 1;
    chars[3] = unicodeInt & (1 << 8) - 1;

    return [[NSString alloc] initWithBytes:chars length:len encoding:NSUTF32StringEncoding];

}
-(void)viewDidLoad{
[超级视图下载];
self.label.text=[self-converting:@“这是一列火车🚂我喜欢火车!🚂”];
}
-(NSString*)convertHexUnicodeString:(NSString*)unicodeText{
NSScanner*myScanner;
NSString*text=nil;
myScanner=[NSScanner scannerWithString:unicodeText];
而([myScanner isattend]==否){
[myScanner scanuptstring:@“&#x”intoString:NULL];
[myScanner scanuptstring:@“intoString:&text];
unicodeText=[unicodeText stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@“%@”,text]和字符串:[self-replaceHexUnicode:text]];
}
unicodeText=[unicodeText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
返回文本;
}
-(NSString*)替换HexUnicode:(NSString*)文本{
text=[text substringfromfromindex:3];
无符号unicodeInt=0;
[[NSScanner scannerWithString:text]scanHexInt:&unicodeInt];
char-chars[4];
int len=4;

chars[0]=(unicodeInt>>24)和(1>16)和(1>8)和(1)有不同的格式,但是相同的想法:扫描字符串以找出字节。Josh,你能解释一下我是怎么做的吗?那里的过程不清楚吗?当它显然被标记为重复时写下了这个:NSString*train=@“\xF0\x9F\x9A\x82”;NSData*data=[train dataUsingEncoding:NSNonLossySystingEncoding];NSString*newEncoding=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSData*newdata=[newEncoding dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];NSString*finalString=[[NSString alloc]initWithData:newdata encoding:nsNonLossySIstringEncoding];self.label.text=finalString;@JoshCaswell-Nevermind,我已经开始工作了…将发布答案。
- (void)viewDidLoad {
    [super viewDidLoad];

    self.label.text = [self convertHexUnicodeString:@"This is a train &#x1f682 I like trains! &#x1f682"];

}

- (NSString *)convertHexUnicodeString:(NSString *)unicodeText {

    NSScanner *myScanner;
    NSString *text = nil;
    myScanner = [NSScanner scannerWithString:unicodeText];

    while ([myScanner isAtEnd] == NO) {

        [myScanner scanUpToString:@"&#x" intoString:NULL] ;
        [myScanner scanUpToString:@" " intoString:&text] ;
        unicodeText = [unicodeText stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@", text] withString:[self replaceHexUnicode:text]];
    }

    unicodeText = [unicodeText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    return unicodeText;
}

- (NSString *)replaceHexUnicode:(NSString *)text {

    text = [text substringFromIndex:3];

    unsigned unicodeInt = 0;
    [[NSScanner scannerWithString:text] scanHexInt:&unicodeInt];
    char chars[4];
    int len = 4;
    chars[0] = (unicodeInt >> 24) & (1 << 24) - 1;
    chars[1] = (unicodeInt >> 16) & (1 << 16) - 1;
    chars[2] = (unicodeInt >> 8) & (1 << 8) - 1;
    chars[3] = unicodeInt & (1 << 8) - 1;

    return [[NSString alloc] initWithBytes:chars length:len encoding:NSUTF32StringEncoding];

}