我得到的\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
?
答案 0 :(得分:1)
? Unicode:U + 1F44D
UTF-16BE:D8 3D DC 4D
所以
println(StringEscapeUtils.escapeJava(data))//\u1F44A\u1F44A
println(StringEscapeUtils.unescapeJava("\ud83d\udc4d\ud83d\udc4d"))//??
也许IDE控制台窗口使用utf-16be? Eclipse可以将控制台窗口设置为使用utf-16be或其他
答案 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版进行了测试。