Как удалить / заменить символы Юникода в Node16

#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. Большое вам спасибо!! это отлично работает, я часами бился об это головой!!