"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
> > > >
> > >
> >
>

Reply via email to