2014-07-20 8 views
11

Voglio usare Emojis nelle stringhe della mia app. Tutte le stringhe risiedono, ovviamente, in stringhe.xmlCome posso inserire i caratteri utf-16 nella risorsa stringa Android?

Il problema è che non tutti gli Emoji sono compatibili con 16 bit. Alcuni Emoji possono essere rappresentati come esadecimale "normale" a 16 bit: '\ u26FF' ma alcuni sono esagoni a 32 bit (UTF-16), generalmente rappresentati come: '\ x1F600'. Non ho alcun problema a gestire quelli all'interno dell'app, nel codice. Ma il file di risorse strings.xml è codificato in UTF8 e non tratta correttamente con caratteri di escape non a 16 bit.

Ho provato ad utilizzare '\ x1F600' - perché ho visto che '\ u26FF' funziona bene. Ma sembra non divorare il carattere di fuga "x". Né ha come la notazione regexp '\ x {1F600}'

Così ho finito per usare un segnaposto stringa di '% 1 $ s' e compilando l'Emoji in codice come questo:

// greeting_3 is defined as: "hello there %1$s!" 
String s = context.getString(R.string.greeting_3, ""); 
// OR: 
String s = context.getString(R.string.greeting_3, new String(Character.toChars(0x1F61C))); 

Questa non è una soluzione molto elegante ... esiste un modo corretto per inserire i caratteri UTF-8 a 32 bit in string.xml?

risposta

8

Ma il file di risorse strings.xml è UTF8

Se è codificato UTF8, è possibile inserire direttamente i vostri emoji. Ma poi rischi che il tuo editor o un altro software li distrugga.

Se li stai inserendo in XML, puoi provare a utilizzare le entità XML: 😀, non sono sicuro di quanto sia supportato da Android.

È inoltre possibile utilizzare coppie surrogate: convertire l'emoji in UTF-16 e utilizzare la fuga standard \u. Si può per esempio controllare questa pagina, ancora ti dice come creare un litaral stringa in Java: http://www.fileformat.info/info/unicode/char/1F600/index.htm

→ U + 1F600 → "\uD83D\uDE00"

+4

Ho provato la via diretta, ma ha causato es la mia applicazione al segfault. Questo è il motivo per cui ho iniziato a cercare alternative :-) Proverò le altre opzioni. – Shoham

+1

Ho provato il testo non elaborato e & # x1f600; con segfault in fase di esecuzione e & # xd83d; & # xde00; con errore di compilazione ("Errore in un file XML: build di interruzione. "). Penso che puoi tranquillamente presentare un bug, è valido. –

+3

Conoscere bug: https://code.google.com/p/android/issues/detail?id=64892 –

0

Io parto dal presupposto che si sta sviluppando qualcosa come Emoji tastiera.#EmojiCodeSheet può aiutare su questo

#EmojiCodeSheet

Progetto Link:https://github.com/shanraisshan/EmojiCodeSheet


Qualsiasi emoji può essere rappresentato in forma diversa 2

  1. Codepoint
  2. String

Per esempio: SMILING_FACE_WITH_SUN_GLASS Emoji

  1. Codepoint: 0x1f60e
  2. String: (che è \ uD83D \ uDE0E infatti)

potete facilmente possibile mostra gli emoji in Android salvandoli xml o Java, la lista è presente al di sotto

  1. XML as strings.xml
  2. as static constant in JAVA files

hai solo bisogno di sostituire questi emoji-codici con le emoji-immagini in nel vostro app per Android, facendo poche righe di codice.

+0

Presumo che la conversione da" 0x1f60e "a" \ uD83D \ uDE0E "sia il punto di codice per la coppia di surrogati UTF-16, come da risposta sopra? http://www.fileformat.info/info/unicode/char/1F600/index.htm –

-1

Aggiungere la risorsa come segue:

<string name="string_title">This is a emoji example <U+1F642></string> 

In Android Studio 3.0 è possibile copiare e incollare un emoji:

Emoji

Ed ecco come appare:

Emoji

+0

non è valido nel file di risorse – friedger

Problemi correlati