StringEscapeUtils.escapeJava

时间:2014-07-26 12:07:03

标签: java scala playframework unicode-escapes

我得到的\u1F44A\u1F44A我希望\ud83d\udc4d\ud83d\udc4d

import org.apache.commons.lang3.StringEscapeUtils

val data=""

println(StringEscapeUtils.escapeJava(data))//\u1F44A\u1F44A

println(StringEscapeUtils.unescapeJava("\u1F44A\u1F44A"))//ὄAὄA

println(StringEscapeUtils.unescapeJava("\ud83d\udc4d\ud83d\udc4d"))//

我如何得到这个\ud83d\udc4d\ud83d\udc4d

3 个答案:

答案 0 :(得分:1)

? Unicode:U + 1F44D

UTF-16BE:D8 3D DC 4D

您会看到1F44D uincode table

所以

println(StringEscapeUtils.escapeJava(data))//\u1F44A\u1F44A
println(StringEscapeUtils.unescapeJava("\ud83d\udc4d\ud83d\udc4d"))//??

也许IDE控制台窗口使用utf-16be? Eclipse可以将控制台窗口设置为使用utf-16be或其他

enter image description here

答案 1 :(得分:0)

这是Apache Commons-Lang 3.0和3.1中的一个错误。我认为它已在3.2.0中修复,因此升级到3.2.x或3.3.x。

答案 2 :(得分:0)

我认为我们不需要Apache Commons库。我们可以使用可用的标准库在Scala中轻松实现这一目标。

val data: String ="??"

println(System.getProperty("file.encoding", "No encoding")))
// prints UTF-8

println(data.map(x => "\\u%04x".format(x.toInt)).mkString)
// prints \ud83d\udc4d\ud83d\udc4d

您可以通过在JVM配置中设置file.encoding参数来设置编码。

Scastie上针对Scala 2.13.3版进行了测试。