Validando el encoding de una cadena JSON

En algunas ocasiones, la conversión a formato JSON puede fallar al usar json_encode en PHP.

Aunque hay diversas causas, he visto que una de las de mayor incidencia es un encoding equivocado (mira que este problema me costó un par de horas, así como me ayudó a descubrir las funciones json_last_error y json_last_error_msg).

Por ejemplo, tenemos el siguiente texto:

{
    "Cantidad": "1.00",
    "ClaveProdServ": "01010101",
    "ClaveUnidad": "H87",
    "Descripcion": "PEGAMENTO MARZIPAN MIRAGE 9130M­G",
    "Descuento": 0,
    "Importe": 862.06,
    "NoIdentificacion": "18000",
    "TrasladoIVA": 137.93,
    "ValorUnitario": 862.06
}

Que, al parecer, tiene todo en un formato normal, sin problemas.

Pero, al tratar de convertir en JSON me topo con el siguiente error: Malformed UTF-8 characters, possibly incorrectly encoded.

Al buscar en Stack Overflow, me encuentro con que en Sublime Text puedo encontrar los caracteres fuera del ASCII, y potencialmente fuera del UTF-8, buscando la expresión regular [^\x00-\x7F].

Al hacer eso, voilà.

Aquí hay tres caracteres que no son espacios, y otro más que sabrá Dios que es:

Figura 1: Caracteres fuera del UTF-8.

Figura 1: Caracteres fuera del UTF-8.

Así pues, en caso de tener problemas con encoding, usar Sublime Text y expresiones regulares para cazar a esos bastardos cambiapieles.


Ver todas las entradas »