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

134

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

Синий огонь
источник
15
var Omega = "Ω";слишком просто?
Heretic Monkey
6
Блокнот не принимает это, он просто пишет O: P
Bluefire
13
@MikeMcCaughan Да, но если другой разработчик испортит кодировку исходного файла, вы потеряете ... У вас всегда будет кто-то, кто скажет: «OOOOps, я не знал, что <заполнитель для программного обеспечения> использует CP1250 в качестве кодировки по умолчанию, и я не заметил того небольшого изменения при коммите "или" character enco-what? " ; =)
Samuel Rossille
3
@Bluefire переключитесь на лучший текстовый редактор, который поддерживает настройку кодировки символов (например, блокнот ++), и установите его в UTF-8. Тогда вы можете написать китайский язык в своем исходном коде, если хотите ... Или оставайтесь в категории ppl, на которую нацелен мой первый комментарий; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille
4
@Bluefire, Notepad ++ должен с этим справиться, вам просто нужно изменить кодировку в меню на UTF-8 или UCS-2.
Heretic Monkey

Ответы:

197

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

var Omega = '\u03A9';

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

ruakh
источник
4
И если кто-то хочет узнать, что такое шестнадцатеричное значение для строки Unicode: mothereff.in/js-escapes
StanE
Другой способ получить шестнадцатеричное значение для строки Unicode из JavaScript: «Ω» .codePointAt (0) .toString (16);
KostasX
53

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

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

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

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

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

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

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

Юкка К. Корпела
источник
18
Сейчас времена изменились, 5 лет спустя люди используют эти вещи, называемые «эмодзи», за пределами U+FFFFдиапазона. У JavaScript тоже есть, так что вы можете это сделать. var poop = '\u{1F4A9}';
Пользователь, который не является пользователем
1
@Userthatisnotauser, и это должен быть принятый ответ!
Marten Koetsier
Как вы можете вставить символ «открытой блокировки» «\ uD83D \ uDD13», используя один код, который является «0x1F512» в JavaScript? А зачем нам два кода для вставки одного символа?
tarekahf
5
@tarekahf Вот краткий урок Unicode. UTF-16 охватывает только точки Unicode от U + 0000 до U + FFFF. Затем появился Unicode и были изобретены суррогаты, чтобы UTF-16 мог получить доступ к этим точкам. Но JavaScript может сделать это прямо сейчас: var lock = '\u{1F512}'И вы получите следующее: 🔓
Пользователь, который не является пользователем
4

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

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

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

Фреско
источник
9
Смайлики усложняют ввод этих кодов! \u{1F641}= 🙁
Пользователь, который не является пользователем