2016-04-08 50 views
7

Sto sviluppando un'applicazione di chat in J2SE che può anche inviare emoticon ad altri utenti.Emoji problema unicode con java .jar

applicazione utilizza https://github.com/vdurmont/emoji-java (Vdurmont Emoji-java-2.1 jar),

Ho seguito tutte cose a seconda di quale descritto su quel link, tutto sta funzionando benissimo durante l'ambiente di sviluppo, ma quando faccio barattolo per lo stesso, Quando sono invio di emoticon ad altri utenti sul Web, mostrando codice (ðŸ~¡ e?).

In primo luogo penso che la sua un problema di caricamento dei file dalla cartella ClassLoader così utilizzato, per ottenere l'immagine corretta ma durante la creazione di vaso è mostrando? (Punto interrogativo), così ho rimosso il codice per voi capito meglio.

codice è scritto di seguito di seguito:

Dove imageHexaCode è array di stringhe di imoticons.

static String[] imageHexaCode = { 
      "1f621", 
      "1f608", 
      "2764", 
      "1f494" 
}; 

& jtp è JTextPane in cui l'inserimento di componenti imoticons quando l'utente clicca sull'etichetta

ChatPaneWrite.jtp.insertComponent(jl); 

Emoticons sono memorizzati nella stessa confezione in cui sto scrivendo è per questo che non ho usato ClassLoader in linea

jl.setIcon(new javax.swing.ImageIcon(getClass().getResource("emoji_" + imageHexaCode[aa] + ".png"))); 

o può anche scrivere come per il pacchetto ChatUI

jl.setIcon(new javax.swing.ImageIcon(getClass().ClassLoader.getResource("ChatUI/emoji_" + imageHexaCode[aa] + ".png"))); 

qui è istantanee:

in vaso di ricevere a fine mostrando che le emoticon come questo

enter image description here

Please help me per risolverlo.

molto grato a tutti in anticipo

+0

Stai esportando anche le immagini nella JAR? –

+0

@abdulrahmank Sì, le immagini vengono esportate correttamente e visualizzate nell'interfaccia utente, solo l'invio e la ricezione hanno qualche problema. –

+1

non sono entrati nel tuo codice ma da ciò che viene visualizzato sull'interfaccia utente, mi sembra inutile e potrebbe essere causato da una codifica del codice errata. (Ad esempio, il mittente sta inviando caratteri UTF-16 e li stai interpretando come ASCII estesi). Se è il caso, può anche spiegare perché non sei riuscito a cercare l'emoji –

risposta

1

Il primo passo è quello di verificare che le risorse di immagine sono in realtà lì in fase di esecuzione. Ad esempio, aggiungi qualche registrazione del valore di getClass().getResource("emoji_" + imageHexaCode[aa] + ".png") per assicurarti che non sia null. È possibile che nel tuo ambiente di sviluppo siano disponibili, ma a causa del modo in cui stai creando la tua versione di produzione, in qualche modo vengono persi o inseriti nella directory sbagliata.

Tuttavia, se non ti dispiace, vorrei anche suggerire un approccio alternativo: piuttosto che usare etichette e icone di immagini, hai considerato di costruire le tue emoticon in un font e quindi di spedire il file di font con la tua applicazione?Ciò avrebbe diversi vantaggi significativi:

  1. Lei non avrebbe bisogno di alcun trattamento speciale per le emoticon: basta mettere il testo unicode in un componente che utilizza il tipo di carattere personalizzato e le emoticon, così come tutto il resto del testo funzionerà.

  2. Le immagini dei font possono essere immagini vettoriali che significa che possono scalare bene come gli utenti cambi livello formato/zoom ecc

  3. L'utente può tagliare/copiare/incollare testo contenente le emoticon; poiché è un testo, funzionerà di nuovo "solo".

Se si decide di prendere questa strada, v'è un eccellente editor di font open-source che ho usato prima chiamata FontForge: https://fontforge.github.io/en-US/. È piuttosto semplice: basta disegnare l'immagine nello slot appropriato per il codice carattere e quindi esportare il file del carattere.

+0

Signore, ho anche fatto ciò che suggerisci ma ancora problema non risolto. –

+0

Signore, estraggo il file jar per vedere dove la produzione sta archiviando le immagini, prima so che potrebbe essere il problema che ho inserito quelle emoji nella stessa cartella in cui si trova il mio file di classe, in secondo luogo, ho fatto anche quello che suggerisci ma ancora problema non risolto. –

0

emoji-java utilizza la codifica UTF-8 per l'analisi e, per impostazione predefinita, anche Netbeans utilizza lo stesso, motivo per cui l'analisi è andata bene durante l'esecuzione in Netbeans.

Ma quando si esegue il programma come file jar, lo schema di codifica si baserà sull'ambiente di sistema.

Come soluzione rapida, è possibile forzare l'uso della codifica UTF-8 per eseguire il file jar.

java -Dfile.encoding=UTF-8 -jar your-jar-file.jar 

Oppure, se si desidera una soluzione programmatica, può utilizzare questo codice

System.setProperty("file.encoding", "UTF-8"); 
java.lang.reflect.Field charset = null; 
charset = java.nio.charset.Charset.class.getDeclaredField("defaultCharset"); 
charset.setAccessible(true); 
charset.set(null, null); 

Si tratta di un generale issue nel emoji-java da vdurmont. Entrambe le soluzioni funzionano per me.