2016-04-29 3 views
2

Je suis en train de convertir un emoji en hexadécimal HTML en utilisant cette bibliothèque java: https://github.com/vdurmont/emoji-java
(prise d'ici: http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0)Convertir emoji hex html avec bibliothèque java et Lucee

emojiUtils = createObject("java", "com.vdurmont.emoji.Emoji", "/componenti/jar/emoji-java-3.1.0.jar"); 

var myTitle = privateFunctionGetTitle(); // for example 

var cleanTitle = emojiUtils.getHtmlHexidecimal(myTitle); 

mais Je reçois cette erreur:No matching Method for getHtmlHexidecimal(string) found for com.vdurmont.emoji.Emoji

J'essaie (pour le débogage)writeDump(emojiUtils); emojiUtils debug

Qu'est-ce que je fais mal?


MISE À JOUR

J'ai aussi essayé ceci:

EmojiParser = createObject("java", "com.vdurmont.emoji.EmojiParser", "/componenti/jar/emoji-java-3.1.0.jar"); 

writeDump(EmojiParser.parseToHtmlDecimal(titoloPagina)); 

mais je reçois:

lucee.runtime.exp.NativeException: Could not initialize class 
    com.vdurmont.emoji.EmojiManager 
... 
Caused by: java.lang.NoClassDefFoundError: 
    Could not initialize class com.vdurmont.emoji.EmojiManager 
... 80 more 

StackTrace: https://gist.githubusercontent.com/ivanionut/8f4e6e356c0b2c8474d21c52d796df3a/raw/5b23ba3ff5f7c930381a8109ea43e29042cc7813/StackTrace

+0

essayer 'emojiUtils.init (myTitle) .getHtmlHexidecimal()', 'getHtmlHexidecimal' ne prend aucun argument. – RRK

+0

@Rejith R Krishnan: 'Aucun constructeur correspondant pour com.vdurmont.emoji.Emoji (string) trouvé' – Ivan

+0

Vous devez travailler à partir d'un échantillon Java. Cet exemple n'a pas init - rien qui prend même un argument execmpt pour getUnicode(). –

Répondre

2

Comme certaines personnes ont suggéré, vous n'êtes pas utiliser la bibliothèque comme je comptais quand je l'ai écrit :)

Vous ne devriez jamais avoir à « créer un objet ». Si vous voulez obtenir la chaîne hexadécimale pour un emoji, vous devez suivre la documentation et faire:

Emoji wink = EmojiManager.getForAlias("wink"); 
String hexa = wink.getHexidecimal(); // Yes, "hexidecimal"... It's a typo that is fixed if you update to 3.1.1 

Si vous voulez changer tous emojis unicode dans une chaîne à leur représentation hexadécimale, vous devez faire:

String str = "An awesome string with a few emojis!"; 
String resultHexadecimal = EmojiParser.parseToHtmlHexadecimal(str); 
System.out.println(resultHexadecimal); 
// Prints: 
// "An 😀awesome 😃string with a few 😉emojis!" 

du côté « intégration », vous allez devoir résoudre les dépendances et le chemin vous:

Si vous utilisez un gestionnaire de paquets (Maven, Gradle ..), il serait plus facile de l'OMI.

+0

Nice pour obtenir une réponse directement de la source :) RE: * ... cette ligne doit pointer vers le bon fichier *. Ils utilisent le [précompilé jar de mvnrepository] (http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0) qui contient "emojis.json" dans le dossier racine. Si PATH n'est pas modifié, getResourceAsStream charge-t-il ce fichier par défaut? – Leigh

+0

Oui, ça * devrait * fonctionner. Aucune garantie cependant: D Je suggère fortement d'utiliser un gestionnaire de paquets au lieu d'importer les pots vous-même. En faisant cela, vous éviterez toute une catégorie de bugs :) –

+0

Oui, comme toujours, il y a des variables en jeu, donc je sais ... "ça dépend" :) Ivan utilise actuellement le jar dans une servlet personnalisée. Le jar est chargé via une fonctionnalité qui utilise un chargeur de classe dynamique. Certaines des méthodes fonctionnent à partir de la servlet, mais pas 'EmojiParser.parseToHtmlHexadecimal' jusqu'à présent. Dans le servlet, il renvoie la chaîne d'origine pour moi. Bien que je soupçonne que c'est quelque chose à voir avec l'environnement, je vais devoir essayer la même chose dans Eclipse et voir si je peux comprendre ce qui est différent. – Leigh

0

(Trop long pour les commentaires)

Un ajout à Vicent's answer. Alors que l'exemple ci-dessus a bien fonctionné à partir d'Eclipse, étrangement cela n'a pas fonctionné pour moi en utilisant CF11 ou Lucee 4.5. Il s'avère que la raison était que ma machine virtuelle Java utilisait l'encodage par défaut Cp1252. Ainsi, quand EmojiLoader.java loaded the "emojis.json" file stream on line 52, le contenu n'était pas interprété correctement.

Pour résoudre ce problème, vous pouvez:

  1. Modifiez le codage par défaut JVM en UTF-8, à savoir -Dfile.encoding=UTF-8 ..OU
  2. Modifier la source EmojiLoader.java pour spécifier l'encodage UTF-8 et reconstruire le pot:

    // In v3.1.0, change line #52 from: 
    BufferedReader br = new BufferedReader(new InputStreamReader(stream)); 
    
    // ... to this instead 
    BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8")); 
    

Après avoir fait un de ces changements, il devrait fonctionner correctement de CF/Lucee. Notez, comme mentionné ci-dessus, v3.1.0 de la bibliothèque a une dépendance sur org.json v20140107. Voir http://mvnrepository.com/artifact/org.json/json/20140107

Lucee Exemple:

jarPaths = ["C:\path\your-emoji-jar.jar", "C:\path\json-20140107.jar"]; 
EmojiParser = createObject("java", "com.vdurmont.emoji.EmojiParser", jarPaths); 
str = "An awesome string with a few emojis!"; 
result = EmojiParser.parseToHtmlHexadecimal(str); 
writeDump(result);