2016-04-29 7 views
2

Я пытаюсь преобразовать смайлик в HTML шестнадцатеричное с помощью этой Java библиотеки: https://github.com/vdurmont/emoji-java
(взято отсюда: http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0)Преобразование смайликов в HTML гекс с библиотекой Java и 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); 

но Я получаю эту ошибку:No matching Method for getHtmlHexidecimal(string) found for com.vdurmont.emoji.Emoji

я пытаюсь (для отладки)writeDump(emojiUtils); emojiUtils debug

Что я делаю неправильно?


UPDATE

Я также попытался это:

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

writeDump(EmojiParser.parseToHtmlDecimal(titoloPagina)); 

, но я получаю:

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

попробовать 'emojiUtils.init (myTitle) .getHtmlHexidecimal()', 'getHtmlHexidecimal' не принимает никаких аргументов. – RRK

+0

@Rejith R Krishnan: 'Нет соответствующего конструктора для com.vdurmont.emoji.Emoji (string) found' – Ivan

+0

Вам нужно работать с образцом Java. В этом примере нет init - ничего, что даже принимает аргумент execmpt для getUnicode(). –

ответ

2

Как некоторые люди предложили, вы не используете библиотеку, как я планировал, когда я ее написал :)

Вам никогда не придется «создавать объект». Если вы хотите получить шестнадцатеричную строку для смайлик, вы должны следовать документации и сделать:

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 

Если вы хотите изменить все Юникода смайликов в строке их шестнадцатеричное представление, вы должны сделать:

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

на стороне «интеграции», вы будете иметь, чтобы решить зависимости и путь самостоятельно:

Если вы используете менеджер пакетов (Maven, Gradle ..), было бы легче ИМО.

+0

Приятно получить ответ напрямую от источника :) RE: * ... эта строка должна указывать на правый файл *. Они используют [предварительно скомпилированный jar из mvnrepository] (http://mvnrepository.com/artifact/com.vdurmont/emoji-java/3.1.0), который содержит «emojis.json» в корневой папке. Если PATH не изменен, getResourceAsStream загружает этот файл по умолчанию? – Leigh

+0

Да, это * необходимо * работа. Нет гарантии: D Я настоятельно рекомендую использовать диспетчер пакетов вместо импорта самих банок. Делая это, вы избежите целой категории ошибок :) –

+0

Да, как всегда в игре есть переменные, поэтому я знаю ... «это зависит» :) Иван фактически использует банку в специальном сервлете. Банку загружается через функцию, которая использует динамический загрузчик классов. Некоторые из методов работают из сервлета, но не EmojiParser.parseToHtmlHexadecimal'. В сервлете он возвращает исходную строку для меня. Хотя я подозреваю, что это связано с окружающей средой, поэтому мне придется попробовать то же самое в Eclipse и посмотреть, могу ли я понять, что другое. – Leigh

0

(слишком долго для комментариев)

Одно дополнение к Vicent's answer. В то время как пример выше работал отлично от Eclipse, странно это не сработало для меня, используя CF11 или Lucee 4.5. Оказывается, причина в том, что моя JVM использовала кодировку Cp1252 по умолчанию. Поэтому, когда EmojiLoader.java loaded the "emojis.json" file stream on line 52, содержимое не интерпретировалось правильно.

Чтобы устранить эту проблему, вы можете:

  1. Изменение JVM кодировки по умолчанию UTF-8, то есть -Dfile.encoding=UTF-8 ..ИЛИ
  2. Изменить источник EmojiLoader.java указать кодировку UTF-8 и восстановить банку:

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

После создания одного из этих изменений, он должен работать нормально с CF/Lucee. Примечание. Как упоминалось выше, v3.1.0 библиотеки имеет зависимость от org.json v20140107. См http://mvnrepository.com/artifact/org.json/json/20140107

Lucee Пример:

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