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