mam bardzo prosty przykład:Jak serializować JSON z json4s ze znakami 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)))
Co wyjdę z tego jest:
{
"english":"serialization",
"japanese":"\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3"
}
Co chcę to jest (całkowicie poprawny AFAIK) JSON:
{
"english":"serialization",
"japanese":"シリアライゼーション"
}
Nie mogę go teraz znaleźć, ale myślę, że przeczytałem gdzieś, że JSON wymaga tylko dwóch specjalnych znaków UTF-8, aby uciec.
Patrząc na kod dla render, wydaje się, że Strings always get this extra double-escaping for non-ASCII characters.
Ktoś wie, w jaki sposób mogę uzyskać prawidłowy JSON bez podwójnego ucieczki wszystkich rozszerzonych znaków UTF-8? Wydaje się to bardzo podobnego problemu do: Why does the PHP json_encode function convert UTF-8 strings to hexadecimal entities?
Aktualizacji: Okazuje się, że jest to sprawa otwarta w json4s z oczekującym PR #327 który został zamknięty na rzecz PR #339 które z kolei połączone w wydaniu 3.4 oddział w commit on Feb 13, 2016.
Nie wiem o _json4s_, ale [RFC 7159] (https://tools.ietf.org/html/rfc7159) mówi, że UTF-8 jest domyślnym kodowaniem dla JSON.Więc teoretycznie nie ma potrzeby (tylko opcja), aby uciec japońskie znaki. Potrzebujesz tylko biblioteki, która to robi lub która może być odpowiednio skonfigurowana. – kriegaex