Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Messed up character encoding with Android + GAE Cloud Endpoints

I made web app using GAE's Cloud Endpoints. App has only backend part. App calls Google Places API and parses JSON responses, creating objects which returns to client. Client is Android app which uses generated client libraries from GAE.

My problem is folowing: app running on local dev server shows on Android correctly UTF-8 formatted strings, but deployed app is showing on Android messed up strings. E.g: Instead of Klinički Centar it shows Klini��ki Centar.

I'm using latest Fedeora GNU/Linux, developing in Eclipse Kepler (newest edition), GAE is ver 1.8.1, Google Plugin for Eclipse ver 3.2.4 (latest).

I have lost incredible amount of time trying to solve this. I assume solution is some config line which forces UTF-8. Just to mention, I have in my appengine-web.xml folowing:

<system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
    <property name="file.encoding" value="UTF-8" />
    <property name="DEFAULT_ENCODING" value="UTF-8" />
</system-properties>

Thanks in advance for every suggestion.

like image 270
Ognjen Stanić Avatar asked Jun 18 '13 11:06

Ognjen Stanić


1 Answers

SOLVED IT!!!!

I think that this is Google's bug evenly as mine. I assumed that response will be encoded in UTF-8, so I just used:

URL url = new URL(PLACE_AC_API + encodedInput + PLACE_AC_API_OPTIONS);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

With explicitly adding charset argument everything worked out:

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));

But Google definitely need to see why this behaves differently in local and deployed.

All the best to everyone, thanks for interesting and effort!

like image 75
Ognjen Stanić Avatar answered Oct 29 '22 12:10

Ognjen Stanić