Короткий ответ, вы можете сопоставить все кодовые единицы UTF-16 encodeURIComponent
будет кодироваться с использованием следующего:
/[^a-zA-Z0-9\-_.!~*'()]/g
, хотя в спецификации говорится, что он обрабатывает дополнительные кодовые точки с 4-байтовым UTF-8кодировки.
Длинный ответ, ES 262 говорит:
15.1.3.4 encodeURIComponent (uriComponent)
Функция encodeURIComponent вычисляет новую версию URI, в которой каждый экземплярнекоторых символов заменяется одной, двумя, тремя или четырьмя escape-последовательностями, представляющими кодировку UTF-8 символа.Когда функция encodeURIComponent вызывается с одним аргументом uriComponent, предпринимаются следующие шаги:
Пусть componentString будет ToString (uriComponent).
LetunescapedURIComponentSet быть строкой, содержащей один экземпляр каждого символа, действительный в uriUnescaped .
Возвращать результат вызова Encode (componentString, unescapedURIComponentSet)
И uriUnescaped определяется следующим образом:
uriUnescaped ::: uriAlpha |Десятичная цифра |uriMark
где
uriAlpha ::: один из abcdefghijklmnopqrstu vwxyz ABCDEFGHIJKLMNOPQRSTU VWXYZ
uriMark ::: один из _.!~ * '()
DecimalDigit ::: один из 0 1 2 3 4 5 6 7 8 9