Tengo un archivo que leí en un objeto JSON
{ "city": "Delicias", "address": "FRANCISCO DOMÍN\u0002GUEZ 9" }
Usamos esta dirección para pasarla a la API de mapas de Google para obtener la latitud y la longitud, pero la API de mapas de Google no está contenta con los caracteres que no son utf-8 como o
\u0002
He buscado por todas partes y no puedo encontrar una solución que funcione en Node16
puedo deshacerme de con
JSON.stringify(jsonObject).replace(/[^\x00-\x7F]/g, "")
Pero nada de lo que he probado parece deshacerse de \u0002
Cosas que he intentado
const escapeUnicode = (str) => { return str.replace(/[\u00A0-\uffff]/gu, function (c) { return "\\u" + ("000" + c.charCodeAt().toString(16)).slice(-4); }); }; JSON.parse(JSON.stringify(jsonObject)); JSON.parse(escapeUnicode(JSON.stringify(jsonObject))); JSON.parse(JSON.stringify(jsonObject).replace(/[^ -~]+/g, "")); JSON.parse(decodeURIComponent(JSON.stringify(jsonObject)));
He intentado todo lo anterior, y un montón de diferentes expresiones regulares .replace()
ninguno parece funcionar,
Después de mucho buscar e intentar, descubrí esta forma posible de deshacerme de los códigos Unicode y reemplazarlos con el carácter utf-8 adecuado.
let jsonObj = { "city": "Delicias", "address": "FRANCISCO DOMÍN\u0002GUEZ 9" }; myString = JSON.stringify(jsonObj); const decodeString = (str) => { return str.replace(/\\u[\dA-F]{4}/gi, (unicode) => { return String.fromCharCode(parseInt(unicode.replace(/\\u/g, ""), 16)); }); } console.log("Decoding a unicode: ", decodeString("\\u00C4")); //double \\ to stop auto conversion by JS console.log("Decoded jsonString: ", decodeString(myString));
Supongo que \u0002 es simplemente nada, ¿verdad? De todos modos, se supone que esta función convierte cualquier Unicode a utf-8