Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

querybuilder returning ISO-8859-1 instead of utf8

TB3dock
Level 7
Level 7

I am using querybuilder to read the properties of some text components. If I enter UTF8 chars (e.g ü) into the Adobe author editor (and I can see from the page source that its set to UTF8), I get ISO-8859-1 out.

When I get the ValueMap from the component in a servlet, I write the results to a file, and to the servlet response writer also.  In the file, if I open it as a ISO-8859-1 I see ü. If i open it as a utf8 file (in VS code), i get a back "?".  In postman I see a black "?" and also on the resultant webpage (which has utf8 set in the header).

NOTE: we have set the servlet parameter encoding to UTF8 in the OSGi config as per: http://adobeaemtips.blogspot.com/2015/11/utf-8-encoding-in-aem.html

Any ideas?

FYI, I also tried with Content-Type: application/json; charset=utf-8 request header.

1 Accepted Solution
asutosh_jena
Correct answer by
Community Advisor
Community Advisor

Hi @TB3dock 

 

Please add the below entry in "Apache Sling Main Servlet" config and try.

 

Additional response headers:
                 Content-Type=text/html;charset=utf-8

 

Thanks!

View solution in original post

7 Replies
asutosh_jena
Correct answer by
Community Advisor
Community Advisor

Hi @TB3dock 

 

Please add the below entry in "Apache Sling Main Servlet" config and try.

 

Additional response headers:
                 Content-Type=text/html;charset=utf-8

 

Thanks!

View solution in original post

TB3dock
Level 7
Level 7
Hi, thanks for the reply. do you mean osgi config, or the servlet source code? Setting the header probably wont have any effect, as the encoding is wrong right after reading it from the query builder result and logging it.
TB3dock
Level 7
Level 7
Well, I found "Apache Sling Main Servlet" in OSGI config, and set the header as you suggest, and, surprisingly, it worked. Surely it should be the request headers which mandate the charset, not a manually set response header? Anyway, thanks for the tip. The problem now is is there any way to set this via code, so that other developers get this setting when they build and deploy locally?
asutosh_jena
Community Advisor
Community Advisor

Hi @TB3dock 

 

You can add this as an OSGi config with org.apache.sling.engine.impl.SlingMainServlet as sling.additional.response.headers property and checkin via code. It will be available for all developers.

 

Thanks!

TB3dock
Level 7
Level 7

Hi. I have created a file called ../config/org.apache.engine.impl.SlingMainServlet.cfg.json, but am not sure what to put in it. My guess would be:

 

sling.additional.response.headers:"Content-Type=test/html; charset=utf-8"

 

But presumably this will overwrite the existing 2 defined headers?

The osgi editor page says this|:

 

Provides mappings for additional response headers Each entry is of the form 'bundleId [ ":" responseHeaderName ] "=" responseHeaderValue' (sling.additional.response.headers)

 

But this makes no sense -  in json, you have xxx:"yyy", but this is saying we should be using :xxx=yyy which seems wrong.

 

asutosh_jena
Community Advisor
Community Advisor

Hi @TB3dock 

 

Please create a file with org.apache.sling.engine.impl.SlingMainServlet.cfg.json name under the config folder.

 

Add the below content to it.

 

{
"sling.max.calls": "1000",
"sling.max.inclusions": "50",
"sling.max.record.requests": "20",
"sling.additional.response.headers":[
"X-Content-Type-Options=nosniff",
"Content-Type=text/html;charset=utf-8"
]
}

 

Thanks! 

Arun_Patidar
Community Advisor
Community Advisor

you can try escaping HTML character e.g.

org.apache.commons.lang.StringEscapeUtils.escapeHtml("aäuüöo");