"Hitting the JCR directly" I.E. No Exporter: http://localhost:8080/content/bar.0.json for a JCR dump via Sling.
It looks like this is a result of the Export Servlet not setting any character encoding, and only setting the content type. Both are needed, otherwise `charset` defaults to ISO-8859-1 which comes from javax.servlet.http.HttpServletResponse. I have put together a demo project [0] to see the before results, as well as a fork of sling.model.impl to see the after [1] when character encoding properly set. Install the demo, navigate to [2] and note the charset in Content-Type header. It's incorrect (ISO-8859-1). Once done, install the POC branch of models impl (and snapshot dependencies) to see how the response has changed. This is a bare-minimum solution [3]. Really, the ExportServlet should detect the proper character encoding. This could come from either setting in the request on the model (passed through the mixin?), or getting it from other means. [0] https://github.com/auniverseaway/sling-model-charset [1] https://github.com/auniverseaway/sling-org-apache-sling-models-impl/tree/POC_Character_Encoding [2] http://localhost:8080/content/bar.model.json [3] https://github.com/auniverseaway/sling-org-apache-sling-models-impl/blob/POC_Character_Encoding/src/main/java/org/apache/sling/models/impl/ExportServlet.java#L95 On Wed, Nov 29, 2017 at 7:04 PM, Justin Edelson <[email protected]> wrote: > I'm not sure what you mean by "Hitting the JCR directly..." since JCR has > no HTTP support. > > In any case, as I said, the ExportServlet doesn't do any special handling > with the content type and the ITs show that application/json is being set, > so I would suggest using a debugger against your instance to see where the > charset is being introduced. > > Regards, > Justin > > On Wed, Nov 29, 2017 at 7:30 PM Chris Millar <[email protected]> wrote: > > > I'm accessing Sling (AEM) directly on port 4502. I can put together a > test > > project with Sling and see if it makes a difference. > > > > If you look at the getResponseContentType method [0], you can see this > does > > not include the charset. > > > > Is it getting set somewhere else or being defaulted? Hitting the JCR > > directly gives me the correct charset. > > > > Is there no way I can get to the response object to set this in the > model? > > Looking at the Impl, it didn't look like it. > > > > [0] > > > > https://sling.apache.org/apidocs/sling9/org/apache/sling/api/ > SlingHttpServletRequest.html#getResponseContentType > > > > On Wed, Nov 29, 2017 at 5:14 PM, Justin Edelson < > [email protected]> > > wrote: > > > > > Hi Chris, > > > Are you sure that the charset is being added by Sling, i.e. are you > > > accessing Sling directly or via an Apache server? > > > > > > The Export Servlet doesn't actually try to infer anything about the > > content > > > type header. It just sets it to request.getResponseContentType(). See > > > [1]. If you trace that back far enough, it ultimately comes from the > > > MimeTypeService which I don't believe would ever include a charset. In > > the > > > ITs this comes back as just application/json. > > > > > > Regards, > > > Justin > > > > > > [1] > > > https://github.com/apache/sling-org-apache-sling-models- > > > impl/blob/master/src/main/java/org/apache/sling/models/ > > > impl/ExportServlet.java#L110 > > > [2] > > > https://github.com/apache/sling-org-apache-sling-models- > > > integration-tests/blob/master/src/test/java/org/apache/ > > > sling/models/testing/exporter/ExporterIT.java#L287 > > > > > > On Wed, Nov 29, 2017 at 6:45 PM Chris Millar <[email protected]> wrote: > > > > > > > I've constructed a Sling Model Exporter with very basic options [0], > > and > > > it > > > > seems to be outputting: > > > > > > > > Content-Type: application/json; charset=ISO-8859-1 > > > > > > > > This breaks the JSON RFC [1] as the default character encoding. It > > should > > > > be: > > > > > > > > Content-Type: application/json; charset=UTF-8 > > > > > > > > I'm hoping there's a solution to this, or that I'm missing something > > > > obvious. Any help is greatly appreciated. > > > > > > > > [0] > > https://gist.github.com/auniverseaway/c8b7b9013b5ecdd9c790253d194d17 > > > b6 > > > > [1] https://tools.ietf.org/html/rfc7159#section-8.1 > > > > > > > > > >
