Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Wikipedia API returns encoded text for foreign language

I am trying to get some data from a Wikipedia page. I use this URL to get the data:

https://el.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=δίας

You can open the URL with your browser to see how it looks.

My problem is that the data is encoded and I don’t know how to decode them from my android app.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

What I have tried so far:

URLDecoder.decode(articleText, "utf-8");

and

 byte [] barr = Base64.getDecoder().decode(articleText);
 Print.e("Decoded value is " + new String(barr));

and

 byte [] barr =  Base64.getMimeDecoder().decode(articleText);
 Print.e("Decoded value is " + new String(barr));

All failed. The first one didn’t change anything.

The second crashes with log:

java.lang.IllegalArgumentException: Illegal base64 character 5c

The third crashes with log:

java.lang.IllegalArgumentException: Last unit does not have enough valid bits

Please note that I only try to decode the encoded text and not all the JSON text.

Any ideas?

>Solution :

That’s just a JSON response, even though using escape sequences in a JSON response like this is unusual.

You don’t need to decode anything. Any character in a JSON string value can be replaced by a Unicode escape sequence. Parsing the JSON string will return the actual characters.

Those escape sequences are valid in Python too.

print('\u0394\u03af\u03b1\u03c2 \u03a7\u03b1\u03ca\u03b4\u03b1\u03c1\u03af\u03bf\u03c5 - \u03b1\u03b8\u03bb\u03b7\u03c4\u03b9\u03ba\u03cc\u03c2 ')
>>> 'Δίας Χαϊδαρίου - αθλητικός '

This:

import requests
url="https://el.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=δίας"
source = requests.get(url).json()
print(source)

Produces

{'batchcomplete': '', 'query': {'normalized': [{'from': 'δίας', 'to': 'Δίας'}], 'pages': {'18786': {'pageid': 18786, 'ns': 0, 'title': 'Δίας', 'extract': 'Το όνομα Δίας μπορεί να αναφέρεται στα παρακάτω:\n\nΜυθολογίαΟ Δίας (μυθολογία) - πατέρας των θεών της ελληνικής μυθολογίας.ΑστρονομίαΟ Δίας (πλανήτης) - ο μεγαλύτερος πλανήτης του ηλιακού συστήματος.\nΔίας LI - φυσικός δορυφόρος του πλανήτη Δία.\nΔίας LII - φυσικός δορυφόρος του πλανήτη Δία.\nΚαυτός Δίας - ονομασία κατηγορίας εξωηλιακών πλανητών.ΤέχνηΔίας του Οτρίκολι - μνημειώδης προτομή του ομωνύμου αρχαίου θεού.\nΔίας και Γανυμήδης - γλυπτό που εκτίθεται στο Αρχαιολογικό Μουσείο Ολυμπίας.\nΔίας και Θέτις - πίνακας του Γάλλου ζωγράφου Ζαν Ωγκύστ Ντομινίκ Ενγκρ.ΑθλητισμόςΑ.Σ. Δίας Πατρών - αθλητικός σύλλογος μπέιζμπολ\nΠ.Σ. Δίας Δίου - ποδοσφαιρικός σύλλογος\nΑ.Ο. Δίας Κορυδαλλού - αθλητικός όμιλος\nΑ.Ο. Δίας Σαραβαλίου - αθλητικός όμιλος\nΑ.Σ. Δίας Κωστακιών - αθλητικός σύλλογος\nΑ.Ο. Δίας Ηρακλείου - αθλητικός όμιλος\nΠ.Α.Σ. Δίας Αγίου Δημητρίου - πολιτιστικός αθλητικός σύλλογος\nΠ.Α.Σ. Δίας Κασσιώπης - ποδοσφαιρικός αθλητικός σύλλογος\nΑ.Ο. Δίας Ολυμπιακού Χωριού - αθλητικός όμιλος\nΑ.Σ. Δίας Χαϊδαρίου - αθλητικός σύλλογος\nΑ.Ο. Δίας Αχαρνών - αθλητικός όμιλος'}}}}

And

source['query']['pages']['18786']['extract']

Prints

‘Το όνομα Δίας μπορεί να αναφέρεται στα παρακάτω:\n\nΜυθολογίαΟ Δίας (μυθολογία) – πατέρας των θεών της ελληνικής μυθολογίας.ΑστρονομίαΟ Δίας (πλανήτης) – ο μεγαλύτερος πλανήτης του ηλιακού συστήματος.\nΔίας LI – φυσικός δορυφόρος του πλανήτη Δία.\nΔίας LII – φυσικός δορυφόρος του πλανήτη Δία.\nΚαυτός Δίας – ονομασία κατηγορίας εξωηλιακών πλανητών.ΤέχνηΔίας του Οτρίκολι – μνημειώδης προτομή του ομωνύμου αρχαίου θεού.\nΔίας και Γανυμήδης – γλυπτό που εκτίθεται στο Αρχαιολογικό Μουσείο Ολυμπίας.\nΔίας και Θέτις – πίνακας του Γάλλου ζωγράφου Ζαν Ωγκύστ Ντομινίκ Ενγκρ.ΑθλητισμόςΑ.Σ. Δίας Πατρών – αθλητικός σύλλογος μπέιζμπολ\nΠ.Σ. Δίας Δίου – ποδοσφαιρικός σύλλογος\nΑ.Ο. Δίας Κορυδαλλού – αθλητικός όμιλος\nΑ.Ο. Δίας Σαραβαλίου – αθλητικός όμιλος\nΑ.Σ. Δίας Κωστακιών – αθλητικός σύλλογος\nΑ.Ο. Δίας Ηρακλείου – αθλητικός όμιλος\nΠ.Α.Σ. Δίας Αγίου Δημητρίου – πολιτιστικός αθλητικός σύλλογος\nΠ.Α.Σ. Δίας Κασσιώπης – ποδοσφαιρικός αθλητικός σύλλογος\nΑ.Ο. Δίας Ολυμπιακού Χωριού – αθλητικός όμιλος\nΑ.Σ. Δίας Χαϊδαρίου – αθλητικός σύλλογος\nΑ.Ο. Δίας Αχαρνών – αθλητικός όμιλος’

Notice that I used the original Greek parameter values in the URL string. Python 3 strings are Unicode, so there’s no need to escape non-English text.

This is unusual

Using escape sequences for all characters is unusual. The HTTP response contains Content-Type: application/json; charset=utf-8 which clearly says the content is UTF8 characters. There’s no need to escape them at all.

source = requests.get(url)
print(source.encoding)
>>> 'utf-8'

The API’s JSON parameters offer a way to receive the text without encoding, by adding the utf8=true parameter. This URL (https://el.wikipedia.org/w/api.php?format=json&utf8=true&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=δίας) returns the strings unescaped.

Using

url="https://el.wikipedia.org/w/api.php?format=json&utf8=true&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=δίας"
source = requests.get(url)
print(source.text)

Shows that the response text is no longer escaped:

{"batchcomplete":"","query":{"normalized":[{"from":"δίας","to":"Δίας"}],"pages":{"18786":{"pageid":18786,"ns":0,"title":"Δίας","extract":"Το όνομα Δίας μπορεί να αναφέρεται στα παρακάτω:\n\nΜυθολογίαΟ Δίας (μυθολογία) – πατέρας των θεών της ελληνικής μυθολογίας.ΑστρονομίαΟ Δίας (πλανήτης) – ο μεγαλύτερος πλανήτης του ηλιακού συστήματος.\nΔίας LI – φυσικός δορυφόρος του πλανήτη Δία.\nΔίας LII – φυσικός δορυφόρος του πλανήτη Δία.\nΚαυτός Δίας – ονομασία κατηγορίας εξωηλιακών πλανητών.ΤέχνηΔίας του Οτρίκολι – μνημειώδης προτομή του ομωνύμου αρχαίου θεού.\nΔίας και Γανυμήδης – γλυπτό που εκτίθεται στο Αρχαιολογικό Μουσείο Ολυμπίας.\nΔίας και Θέτις – πίνακας του Γάλλου ζωγράφου Ζαν Ωγκύστ Ντομινίκ Ενγκρ.ΑθλητισμόςΑ.Σ. Δίας Πατρών – αθλητικός σύλλογος μπέιζμπολ\nΠ.Σ. Δίας Δίου – ποδοσφαιρικός σύλλογος\nΑ.Ο. Δίας Κορυδαλλού – αθλητικός όμιλος\nΑ.Ο. Δίας Σαραβαλίου – αθλητικός όμιλος\nΑ.Σ. Δίας Κωστακιών – αθλητικός σύλλογος\nΑ.Ο. Δίας Ηρακλείου – αθλητικός όμιλος\nΠ.Α.Σ. Δίας Αγίου Δημητρίου – πολιτιστικός αθλητικός σύλλογος\nΠ.Α.Σ. Δίας Κασσιώπης – ποδοσφαιρικός αθλητικός σύλλογος\nΑ.Ο. Δίας Ολυμπιακού Χωριού – αθλητικός όμιλος\nΑ.Σ. Δίας Χαϊδαρίου – αθλητικός σύλλογος\nΑ.Ο. Δίας Αχαρνών – αθλητικός όμιλος"}}}}

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading