Emoji unicode problème avec java.pot
2 answers
La première étape consiste à vérifier que les ressources d'image sont bien là lors de l'exécution. Par exemple, ajoutez une journalisation de la valeur de getClass().getResource("emoji_" + imageHexaCode[aa] + ".png")
pour vous assurer qu'elle n'est pas null
. Il est possible que dans votre environnement de développement, ceux-ci soient disponibles, mais en raison de la façon dont vous construisez votre version de production, ils sont en quelque sorte manqués ou placés dans le mauvais répertoire.
Cependant, si cela ne vous dérange pas, je voudrais également suggérer une approche alternative: plutôt que d'utiliser des étiquettes et une image icônes, avez-vous envisagé de construire vos émoticônes dans une police, puis d'expédier le fichier de police avec votre application? Cela aurait plusieurs avantages significatifs:
Vous n'auriez pas besoin d'une manipulation spéciale pour les émoticônes: il suffit de mettre le texte unicode dans un composant qui utilise votre police personnalisée et les émoticônes ainsi que tous les autres textes fonctionneront.
Les images de police peuvent être des images vectorielles ce qui signifie qu'elles peuvent évoluer bien comme les utilisateurs changer la taille de police/niveau de zoom etc.
L'utilisateur peut couper/copier/coller du texte contenant les émoticônes; comme il s'agit de texte, il "fonctionnera" à nouveau.
Si vous décidez de prendre cette route, il existe un excellent éditeur de polices open source que j'ai déjà utilisé appelé FontForge: https://fontforge.github.io/en-US / . C'est assez facile: il vous suffit de concevoir l'image dans l'emplacement approprié pour le code de caractère, puis d'exporter le fichier de police.
Emoji-java utilise l'encodage UTF-8 pour l'analyse et par défaut Netbeans utilise également le même, c'est pourquoi votre analyse s'est bien déroulée lorsqu'elle est exécutée dans Netbeans.
Mais lorsque vous exécutez le programme en tant que fichier jar, le schéma d'encodage sera basé sur votre environnement système.
Comme solution rapide, vous pouvez forcer l'utilisation de l'encodage UTF-8 pour exécuter votre fichier jar.
java -Dfile.encoding=UTF-8 -jar your-jar-file.jar
Ou si vous voulez une solution programmatique, peut utiliser ce code
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);
C'est un problème général dans le emoji-java par vdurmont. Les deux la solution fonctionne pour moi.