2016-04-29 21 views
2

Ich versuche, ein Emoji in HTML hexadezimal mit dieser Java-Bibliothek zu konvertieren: https://github.com/vdurmont/emoji-java
(aus hier: http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0)Convert Emojis html hex mit Java-Bibliothek & 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); 

aber ich bekomme diese Fehlermeldung:No matching Method for getHtmlHexidecimal(string) found for com.vdurmont.emoji.Emoji

ich versuche (für Debug)writeDump(emojiUtils); emojiUtils debug

Was mache ich falsch?


UPDATE

Ich habe auch versucht dies:

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

writeDump(EmojiParser.parseToHtmlDecimal(titoloPagina)); 

aber ich bekomme:

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

Versuch 'emojiUtils.init (myTitle) .getHtmlHexidecimal()', 'getHtmlHexidecimal' keine Argumente übernehmen. – RRK

+0

@Rejith R Krishnan: 'Kein passender Konstruktor für com.vdurmont.emoji.Emoji (string) gefunden ' – Ivan

+0

Sie müssen von einem Java-Beispiel arbeiten. Dieses Beispiel hat keine Init - nichts, das sogar ein Argument execmpt für getUnicode() benötigt. –

Antwort

2

Da einige Leute vorgeschlagen, dass Sie nicht mit der Bibliothek, wie ich zu planen, als ich es geschrieben habe :)

Sie sollten nie haben, „ein Objekt erstellen“. Wenn Sie die hexadezimale Zeichenfolge für ein Emoji erhalten möchten, sollten Sie die Dokumentation beachten und zu tun:

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 

Wenn Sie alle Unicode Emojis in einer Zeichenfolge in ihre hexadezimale Darstellung ändern möchten, sollten Sie tun:

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!" 

auf der „Integration“ Seite, Sie gehen die Abhängigkeiten und mit dem Weg, sich zu lösen zu haben:

für das richtige Glas erhalten, wenn Sie einen Paket-Manager (Maven, Gradle ..) verwendet, wäre es IMO einfacher sein.

+0

Schön, eine Antwort direkt von der Quelle zu bekommen :) RE: * ... diese Zeile muss auf die richtige Datei zeigen *. Sie verwenden das [vorkompilierte jar von mvnrepository] (http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0), das "emojis.json" im Stammordner enthält. Wenn PATH nicht geändert wird, lädt getResourceAsStream diese Datei standardmäßig? – Leigh

+0

Ja, es sollte * funktionieren. Keine Garantie jedoch: D Ich empfehle dringend, einen Paketmanager zu verwenden, anstatt die Gläser selbst zu importieren. Auf diese Weise vermeiden Sie eine ganze Kategorie von Fehlern :) –

+0

Ja, wie immer gibt es Variablen im Spiel, also weiß ich ... "es kommt darauf an" :) Ivan verwendet das Jar in einem benutzerdefinierten Servlet. Das Jar wird über ein Feature geladen, das einen dynamischen Klassenlader verwendet. Einige der Methoden arbeiten mit dem Servlet, aber bisher nicht mit 'EmojiParser.parseToHtmlHexadecimal'. Im Servlet gibt es die ursprüngliche Zeichenfolge für mich zurück. Obwohl ich vermute, dass etwas mit der Umgebung zu tun hat, muss ich das gleiche in Eclipse versuchen und schauen, ob ich herausfinden kann, was anders ist. – Leigh

0

(Zu lang für Kommentare)

One Neben Vicent's answer. Das obige Beispiel funktionierte zwar gut aus Eclipse, aber seltsamerweise funktionierte es nicht mit CF11 oder Lucee 4.5. Es stellte sich heraus, dass meine JVM die Standardcodierung Cp1252 verwendete. Also, wenn EmojiLoader.java loaded the "emojis.json" file stream on line 52, wurde der Inhalt nicht richtig interpretiert.

Um das Problem zu beheben, können Sie entweder:

  1. Ändern der JVM Standard-Kodierung auf UTF-8, das heißt -Dfile.encoding=UTF-8 ..OR
  2. Ändern der EmojiLoader.java Quelle UTF-8-Codierung angeben und das Gefäß wieder aufzubauen:

    // 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")); 
    

Nach einem dieser Änderungen, sollte es funktionieren von CF/Lucee Ordnung. Beachten Sie, dass v3.1.0 der Bibliothek, wie oben erwähnt, eine Abhängigkeit von org.json v20140107 hat. Siehe http://mvnrepository.com/artifact/org.json/json/20140107

Lucee Beispiel:

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);