首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json4s总是转义unicode字符欧元。

json4s总是转义unicode字符欧元。
EN

Stack Overflow用户
提问于 2021-01-13 16:30:29
回答 1查看 179关注 0票数 3

我尝试编写一个包含带有JString字符的json4s,如下所示:

代码语言:javascript
复制
import org.joda.time.format.ISODateTimeFormat
import org.joda.time.{DateTime, DateTimeZone}
import org.json4s.native.Serialization.writePretty
import org.json4s.{DateFormat, DefaultFormats, Formats, JString}

import java.util.{Date, TimeZone}

object Json4sEncodingTest {

  val formats = new Formats {

    val dateFormat: DateFormat = new DateFormat {
      override def parse(s: String): Option[Date] =
        try {
          Option(
            DateTime
              .parse(s, ISODateTimeFormat.dateTimeParser().withZoneUTC())
              .withZone(DateTimeZone.forID(timezone.getID))
              .toDate
          )
        } catch {
          case e: IllegalArgumentException => None
        }
      override def format(d: Date): String = DefaultFormats.lossless.dateFormat.format(d)
      override def timezone: TimeZone = DefaultFormats.lossless.dateFormat.timezone
    }

    override def alwaysEscapeUnicode: Boolean = false
  }

  def main(args: Array[String]): Unit = {
    println(writePretty(JString("2€"))(formats))
  }

}

这导致:

代码语言:javascript
复制
"2\u20ac"

我的预期结果是:

代码语言:javascript
复制
"2€"

我发现在org.json4s.ParserUtil.quote中,\u 2000到\u 2100之间的字符总是转义的。

问题:为什么会这样?

  • json4s版本: 3.7.0-M7
  • scala版本: 2.12.11
EN

回答 1

Stack Overflow用户

发布于 2021-01-17 07:07:07

正如在这个github问题中阐述的那样,目前不可能使用json4s本机来完成这一任务。检查是否要转义的代码是:

代码语言:javascript
复制
(c >= '\u0000' && c <= '\u001f') || (c >= '\u0080' && c < '\u00a0') || (c >= '\u2000' && c < '\u2100')

不满足这个条件。一个可能的解决方案(嗯,某种程度上的解决方案)是使用jackson而不是本地的。那么,这将是可行的:

代码语言:javascript
复制
import org.json4s.jackson.JsonMethods._
import org.json4s.JsonAST.JString

println(pretty(render(JString("2€"))))

代码在斯卡斯蒂上运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65706000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档