Вставить символ Юникода в JavaScript

Мне нужно вставить Omega (Ω) на мою страницу html. Для этого я использую свой HTML-код с экранированием, поэтому я могу написать Ω и получить Ω. Это все прекрасно и хорошо, когда я помещаю его в HTML-элемент; однако, когда я пытаюсь поместить его в свою JS, например. var Omega = Ω, он анализирует этот код как JS, и все это не работает. Кто-нибудь знает, как это сделать?

Ответ 1

Я предполагаю, что вы действительно хотите, чтобы Omega была строкой, содержащей омегу в верхнем регистре? В этом случае вы можете написать:

var Omega = '\u03A9';

(Потому что & Omega; символ Юникода с кодовым номером U + 03A9, т.е. 03A9 есть 937, за исключением того, что записано как четыре шестнадцатеричных цифры.)

Ответ 2

Хотя @ruakh дал хороший ответ, я добавлю несколько альтернатив для полноты:

Фактически вы можете использовать даже var Omega = 'Ω' в JavaScript, но только если ваш код JavaScript:

  • внутри атрибута события, как в onclick="var Omega = '&#937'; alert(Omega)" или
  • в элементе script внутри документа XHTML (или XHTML + XML) с типом содержимого XML.

В этих случаях код будет первым (до того, как он будет передан интерпретатору JavaScript) проанализирован парсером HTML, чтобы распознать символьные ссылки, такие как Ω. Ограничения делают это непрактичным подходом в большинстве случаев.

Вы также можете ввести символ Ω как таковой, как в var Omega = 'Ω', но тогда кодировка символов должна разрешить это, кодировка должна быть правильно объявлена, и вам нужно программное обеспечение, которое позволяет вводить такие символы. Это чистое решение и вполне возможно, если вы используете кодировку UTF-8 для всего и готовы решать проблемы, созданные им. Исходный код будет читабельным, и, читая его, вы сразу увидите символ, а не код. С другой стороны, это может вызвать неожиданности, если другие люди начнут работать с вашим кодом.

Использование обозначений \u, как и в var Omega = '\u03A9', работает независимо от кодировки символов, и практически практически универсально. Однако он может использоваться как таковой только до U + FFFF, то есть до \uffff, но большинство персонажей, которые большинство людей когда-либо слышали, попадали в эту область. (Если вам нужны "более высокие" символы, вам нужно использовать суррогатные пары или один из двух подходов выше).

Вы также можете создать символ, используя метод String.fromCharCode(), передавая в качестве параметра номер Юникода в десятичном формате, как в var Omega = String.fromCharCode(937), или в шестнадцатеричном виде, как в var Omega = String.fromCharCode(0x3A9). Это работает до U + FFFF. Этот подход можно использовать, даже если у вас есть номер Unicode в переменной.

Ответ 3

Ответ правильный, но вам не нужно объявлять переменную. Строка может содержать ваш символ:

"This string contains omega, that looks like this: \u03A9"

К сожалению, эти коды в ASCII необходимы для отображения UTF-8, но я все еще жду (с тех пор слишком много лет...) в тот день, когда UTF-8 будет таким же, как ASCII, и ASCII будет просто воспоминание о прошлом.