我在期待\ud83d\udc4d\ud83d\udc4d的地方得到了\u1F44A\u1F44A。
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?
发布于 2020-11-24 14:48:56
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或其他

发布于 2014-07-27 20:29:04
这是Apache Commons-Lang 3.0和3.1中的一个bug。我认为它已经在3.2.0中修复了,所以升级到3.2.x或3.3.x。
发布于 2020-11-24 15:27:59
我不认为我们需要Apache Commons Library来做这件事。我们可以使用可用的标准库在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参数来设置编码。
在Scala2.13.3版的Scastie上测试。
https://stackoverflow.com/questions/24970848
复制相似问题