2016-03-25 23 views
2

ben sunucudan böyle JSON alıyorum gelen çoklu karakter emoji oluşturmak için:nasıl ham onaltılık

{ 
    "unicode":"1f468-1f468-1f467-1f467" 
} 

ve ben ekran ve/veya kopyalanmasına yönelik kompozit karakteri çevirmek gerekiyor karton:

çözüm şimdiye kadar bu SO question geliyor:

let u = json["unicode"] as? String 
let dashless = u.characters.split{$0 == "-"}.map(String.init) 
let charArray = dashless.map { char -> Character in 
    let code = Int(strtoul(char, nil, 16)) 
    return Character(UnicodeScalar(code)) 
} 
let unicode = String(charArray) 
UIPasteboard.generalPasteboard().string = unicode 

Bu harika işleri tek karakterli emoji tanımları için.

Ör ben ... Bu JSON ile yukarıda

{ 
    "unicode":"1f4a9" 
} 

kod çalıştırmasına ... ve beklenen sonucu yapıştırabilirsiniz:. Ancak, daha önce listelenen mmgg aile emoji ile yaptığımda, iOS'ta aşağıdakileri elde ederim: eksi boşluklar: ‍ ‍ ‍. Sadece bir metin alanına yapıştırıldığında birleştirmek istemiyorlar.

Bu bir iOS hatası mı, yoksa yanlış bir şey mi yapıyorum?

cevap

3

strtoul olmadan

"".unicodeScalars.forEach { (c) in 
    print(c.escape(asASCII: true),terminator: "") 
} 

print("") 

"‍‍‍".unicodeScalars.forEach { (c) in 
    print(c.escape(asASCII: true), terminator: "") 
} 

/* 
\u{0001F468}\u{0001F468}\u{0001F467}\u{0001F467} 
\u{0001F468}\u{200D}\u{0001F468}\u{200D}\u{0001F467}\u{200D}\u{0001F467} 
*/ 

orijinal, biraz değiştirilmiş kod

import Darwin // stroul 

let u = "1f468-1f468-1f467-1f467" 
let dashless = u.characters.split{$0 == "-"}.map(String.init) 
let emoji = dashless.map { char -> String in 
    let code = Int(strtoul(char, nil, 16)) 
    return String(UnicodeScalar(code)) 
    }.joinWithSeparator("\u{200D}") 

print(emoji) // ‍‍‍ 

saf Swift kodu, hiçbir Vakfı ... farkı görmek, sizin oyun alanında bu deneyin

let u = "1f468-1f468-1f467-1f467" 
let emoji = u.characters.split("-") 
    .map {String(UnicodeScalar(Int(String($0),radix: 16) ?? 0))} 
    .joinWithSeparator("\u{200D}") 

print(emoji) // ‍‍‍ 
+1

Ah, harika! [Sıfır genişliği marangoz] (https://en.wikipedia.org/wiki/Zero-width_joiner) hakkında bilmiyordum. – clozach

+0

Sizi rahatsız etmekten nefret ediyorum, ama bu çözüm ton değiştiricilerle emoji için çalışmıyor. Örneğin, bu JSON eller ve bir ton kare yerine sadece bir renk kare verir: 'let u =" 1f64c-1f3fd "'… – clozach

+0

@clozach bunu (yazdırılabilir formda) emojiyi buraya koydu ... – user3441734