#javascript #node.js #json
Вопрос:
У меня есть файл, который я считываю в объект JSON
{
"city": "Delicias",
"address": "FRANCISCO DOMÍNu0002GUEZ 9"
}
Мы используем этот адрес, чтобы передать его в Google maps API, чтобы получить широту и долготу, но Google maps api не в восторге от символов, отличных от utf-8, таких как или
u0002
Я искал повсюду и не могу найти решение, которое работает в Node16
Я могу избавиться с помощью
JSON.stringify(jsonObject).replace(/[^x00-x7F]/g, "")
Но ничто из того, что я пробовал, похоже, не помогает избавиться
u0002
Вещи, которые я пробовал
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)));
Я перепробовал все вышеперечисленное, и куча разных регулярных .replace()
выражений, похоже, не помогает,
Комментарии:
1. Можете ли вы предоставить нам результат, которого вы ожидаете?
2. Результат, который я ожидаю, будет таким же, как и при вводе, но с удалением / заменой символов, отличных от utf-8.
Ответ №1:
После долгих поисков и попыток я понял, что это единственный возможный способ избавиться от уникодов и заменить их соответствующим символом utf-8.
let jsonObj = {
"city": "Delicias",
"address": "FRANCISCO DOMÍNu0002GUEZ 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));
Я предполагаю, что u0002-это просто ничто, верно?
В любом случае, предполагается, что эта функция преобразует любой юникод в utf-8
Комментарии:
1. Большое вам спасибо!! это отлично работает, я часами бился об это головой!!