2

我正在尝试使用此 java 库将表情符号转换为 html 十六进制:https ://github.com/vdurmont/emoji-java
(取自此处: http: //mvnrepository.com/artifact/com.vdurmont/emoji- java/3.1.0 )

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 调试

我究竟做错了什么?


更新

我也试过这个:

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

堆栈跟踪:https : //gist.githubusercontent.com/ivanionut/8f4e6e356c0b2c8474d21c52d796df3a/raw/5b23ba3ff5f7c930381a8109ea43e29042cc7813/StackTrace

4

2 回答 2

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

如果您想将字符串中的所有 unicode 表情符号更改为十六进制表示,您应该执行以下操作:

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 ..),IMO 会更容易。

于 2016-04-29T15:56:03.840 回答
0

(评论太长了)

Vicent 回答的一个补充。虽然上面的示例在 Eclipse 中运行良好,但奇怪的是它不适用于使用 CF11 或 Lucee 4.5 的我。原来原因是我的 JVM 使用了默认编码 Cp1252。因此,当EmojiLoader.java 在第 52 行加载“emojis.json”文件流时,内容没有被正确解释。

要解决此问题,您可以:

  1. 将 JVM 默认编码更改为 UTF-8,即-Dfile.encoding=UTF-8.. 或
  2. 更改 EmojiLoader.java 源以指定 UTF-8 编码并重建 jar:

    // 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

卢西示例:

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);
于 2016-05-01T16:57:35.950 回答