Tôi có một ví dụ thực sự đơn giản:Làm thế nào để tuần tự hóa JSON với json4 với các ký tự UTF-8?
import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.JsonDSL._
val json = ("english" -> JString("serialization")) ~ ("japanese" -> JString("シリアライゼーション"))
println(pretty(render(json)))
Những gì tôi có được ra khỏi đó là:
{
"english":"serialization",
"japanese":"シリアライゼーション"
}
:
{
"english":"serialization",
"japanese":"\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3"
}
Những gì tôi muốn điều này (hoàn toàn hợp lệ AFAIK) JSON là Tôi không thể tìm thấy nó ngay bây giờ, nhưng tôi nghĩ rằng tôi đã đọc ở đâu đó rằng JSON chỉ yêu cầu hai ký tự UTF-8 đặc biệt để được thoát.
Nhìn vào mã cho render, có vẻ như Strings always get this extra double-escaping for non-ASCII characters.
Bất cứ ai cũng biết cách tôi có thể nhận được JSON hợp lệ mà không cần phải thoát hai lần tất cả các ký tự mở rộng UTF-8? Điều này có vẻ như một vấn đề rất tương tự như: Why does the PHP json_encode function convert UTF-8 strings to hexadecimal entities?
Cập nhật: Hóa ra đây là một vấn đề mở trong json4s với một cấp phát PR #327 được đóng ủng hộ PR #339 do đó sáp nhập vào phiên bản 3.4 chi nhánh trong một số commit on Feb 13, 2016.
Tôi không biết về _json4s_, nhưng [RFC 7159] (https://tools.ietf.org/html/rfc7159) nói rằng UTF-8 là mã hóa mặc định cho JSON.Vì vậy, về mặt lý thuyết không cần thiết (chỉ có một lựa chọn) để thoát khỏi các ký tự Nhật Bản. Bạn chỉ cần một thư viện mà nó hoặc có thể được cấu hình cho phù hợp. – kriegaex