Если вас интересует небольшое ограниченное подмножество возможных символов (например, utf 16), ваш изложенный подход будет правильным и легко заполнить:
let utf16Chars = [...Array(0xFFFF)].map((_, i) => String.fromCharCode(i));
let alphaNumeric = /[a-zA-Z0-9]/;
let symbols = utf16Chars.filter(e => !e.match(alphaNumeric));
console.log(symbols.length);
console.log(symbols.slice(0,100));
Честно говоря, я ужасно мало знаю о терминологиях UTF, ASCII, Unicode ... et c. Так что простите меня, если я ошибаюсь. Но это сообщение SO предполагает, что UTF 16 может быть тем, что вы ищете, а это сообщение mdn предполагает, что 0-0xffff должен дать вам символы UTF.