How to send accented characters with diacritics in HTTP request-payload?

Question:

I am requiring to send special characters like accented characters with diacritics, e.g. o-acute ó, via API

This is my test code

import string
import http.client
import datetime
import json

def apiSendFarmacia(idatencion,articulo,deviceid):
    ##API PAYLOAD
    now = datetime.datetime.now()
    conn = http.client.HTTPSConnection("apimocha.com")
    payload = json.dumps({
      "idatencion": idatencion,
      "articulo": articulo,
      "timestamp": str(now),
      "deviceId": deviceid
      
    }).encode("utf-8")
    headers = {
      'Content-Type': 'application/json'
    }
    conn.request("POST"
                ,"/xxxx/api2"#"/my/api/path" #"/alexa"
                , payload
                , headers)
    res = conn.getresponse()
    httpcode = res.status
    data = res.read()
    return httpcode#, data.decode("utf-8")
    ##API PAYLOAD

when executing the function with some special characters

apiSendFarmacia(2222,"solución",2222)

the mock API will receive following JSON payload with u00f3 instead of ó:

{
      "idatencion": 2222,
      "articulo": "soluciu00f3n",
      "timestamp": "2022-12-07 14:52:24.878976",
      "deviceId": 2222
}

I was expecting the special character with its accent-mark ó to show in the mock API.

Asked By: Andres Mora

||

Answers:

As you print it, it will appear as the special character:

>>> print('soluciu00f3n')
solución

u00f3 denotes the hexadecimal representation for Unicode Character ‘LATIN SMALL LETTER O WITH ACUTE’ (U+00F3).

The is an escape-signal that tells the interpreter that the subsequent character(s) has to be treated as special character. For example n is interpreted as newline, t as tab and u00f3 as Unicode character ó.

Answered By: nokla