16진수 인코딩이 emoji 문자로 변경됨
Swift:
import Foundation
extension String{
func emojiStr() -> String {
//1.
let scanner = NSScanner(string: self)
//2.
var value: UInt32 = 0
scanner.scanHexInt(&value)
//3. unicode
let charCode = Character(UnicodeScalar(value))
//4. uniconde
return "\(charCode)"
}
}
Objective C: .h 파일
#import
@interface NSString (Emoji)
/**
* emoji
*/
+ (NSString *)emojiWithIntCode:(long)intCode;
/**
* emoji
*/
+ (NSString *)emojiWithStringCode:(NSString *)stringCode;
- (NSString *)emoji;
/**
* emoji
*/
- (BOOL)isEmoji;
@end
.m 파일
#import "NSString+Emoji.h"
#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)
@implementation NSString (Emoji)
+ (NSString *)emojiWithIntCode:(long)intCode {
NSString * s = [NSString stringWithFormat:@"%ld",intCode];
int symbol = EmojiCodeToSymbol([s intValue]);
NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];
if (string == nil) { // Emoji
string = [NSString stringWithFormat:@"%C", (unichar)intCode];
}
return string;
}
- (NSString *)emoji
{
return [NSString emojiWithStringCode:self];
}
+ (NSString *)emojiWithStringCode:(NSString *)stringCode
{
char *charCode = (char *)stringCode.UTF8String;
long intCode = strtol(charCode, NULL, 16);
return [self emojiWithIntCode:intCode];
}
// emoji
- (BOOL)isEmoji
{
BOOL returnValue = NO;
const unichar hs = [self characterAtIndex:0];
// surrogate pair
if (0xd800 <= hs && hs <= 0xdbff) {
if (self.length > 1) {
const unichar ls = [self characterAtIndex:1];
const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f) {
returnValue = YES;
}
}
} else if (self.length > 1) {
const unichar ls = [self characterAtIndex:1];
if (ls == 0x20e3) {
returnValue = YES;
}
} else {
// non surrogate
if (0x2100 <= hs && hs <= 0x27ff) {
returnValue = YES;
} else if (0x2B05 <= hs && hs <= 0x2b07) {
returnValue = YES;
} else if (0x2934 <= hs && hs <= 0x2935) {
returnValue = YES;
} else if (0x3297 <= hs && hs <= 0x3299) {
returnValue = YES;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
returnValue = YES;
}
}
return returnValue;
}
@end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.