JavaScript: необходимо ли экранировать символы c диакритизма для регулярных выражений и объектов? - PullRequest
0 голосов
/ 05 марта 2020

Я готовлю некоторые JavaScript файлы для производства и пытаюсь максимально уменьшить их размер, у меня есть следующая функция:

function toAscii(txt) {
  var map = {'á':'a','à':'a','â':'a','ã':'a','ä':'a','å':'a','è':'e','é':'e','ê':'e','ë':'e','ì':'i','í':'i','î':'i','ï':'i','ò':'o','ó':'o','ô':'o','õ':'o','ö':'o','ø':'o','ù':'u','ú':'u','û':'u','ü':'u'};
  return txt.replace(/[áàâãäåèéêëìíîïòóôõöøùúûü]/g, function (m) {return map[m];}); 
}

Но когда я компилирую это с Google Closure , которая является хорошим программным обеспечением, она в юникоде экранирует регулярное выражение и объект .

function toAscii(a){var b={"\u00e1":"a","\u00e0":"a","\u00e2":"a","\u00e3":"a","\u00e4":"a","\u00e5":"a","\u00e8":"e","\u00e9":"e","\u00ea":"e","\u00eb":"e","\u00ec":"i","\u00ed":"i","\u00ee":"i","\u00ef":"i","\u00f2":"o","\u00f3":"o","\u00f4":"o","\u00f5":"o","\u00f6":"o","\u00f8":"o","\u00f9":"u","\u00fa":"u","\u00fb":"u","\u00fc":"u"};return a.replace(/[\u00e1\u00e0\u00e2\u00e3\u00e4\u00e5\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed\u00ee\u00ef\u00f2\u00f3\u00f4\u00f5\u00f6\u00f8\u00f9\u00fa\u00fb\u00fc]/g,function(a){return b[a]})};

Я проверил, что код неэкранированный работает, так как вы думаете, необходимо ли избежать этого?
Я прочитал, что это работает, потому что документ HTML должен быть <meta charset="utf-8">, что в моем случае. Но независимо от того, что я пытаюсь использовать греческий, арабский c, китайский, ISO-8859-7, GB2312, ASMO_449, он всегда работает.

Так почему же его обычно экранируют? это проблема браузера? Вы бы не оставили его, чтобы уменьшить размер файла?


PD: Возможно, проблема в том, что если в какой-то момент вы используете редактор для редактирования файла JS, который не имеет правильной кодировки, он сломает символы, верно?
Я не думаю, что стоит кодировать, если это единственная проблема.

PD2: Если я применяю флаг --charset utf-8 в программном обеспечении компилятора закрытия это не ускользает от персонажей.

1 Ответ

0 голосов
/ 08 марта 2020

Параметр кодировки задокументирован здесь:

https://github.com/google/closure-compiler/wiki/Flags-and-Options#miscellaneous

- кодировка VAL Ввод и вывод кодировки для всех файлов. По умолчанию принимайте UTF-8 в качестве входа и выхода US_ASCII

...