Вставте Unicode символ у JavaScript


134

Мені потрібно вставити Omega (Ω) на мою сторінку html. Для цього я використовую код, що уникнув HTML, і я можу написати Ωта отримати Ω. Це все добре і добре, коли я вкладаю його в HTML-елемент; однак, коли я намагаюся вкласти його у свій JS, наприклад var Omega = Ω, він аналізує цей код як JS, і все це не працює. Хтось знає, як з цим піти?


15
var Omega = "Ω";занадто просто?
Єретична мавпа

6
Блокнот не приймає цього, він просто пише O: P
Bluefire

13
@MikeMcCaughan Так, але якщо інший розробник заплутався з кодуванням вихідного файлу, ви втратили ... У вас завжди буде хтось сказав "OOOOps, я не знав, що <заповнювач для програмного забезпечення> використовує CP1250 як кодування за замовчуванням, і я не помічав тієї невеликої зміни під час здійснення комітету "чи" символу енко-що? " ; =)
Самуель Россіль

3
@Bluefire переключиться на кращий текстовий редактор, який підтримує налаштування кодування символів (наприклад, блокнот ++) та встановить його на UTF-8. Тоді ви можете написати Chineese в вихідному коді , якщо ви хочете ... або залишитися в категорії держзакупівлі цільових мій перший коментар =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille

4
@Bluefire, Notepad ++ повинен добре впоратися, потрібно просто змінити кодування в меню на UTF-8 або UCS-2.
Єретична мавпа

Відповіді:


197

Я здогадуюсь, що ви насправді хочете Omegaбути рядком, що містить велику омегу? У цьому випадку ви можете написати:

var Omega = '\u03A9';

(Оскільки Ω - символ Unicode з кодовою точкою U + 03A9 ; тобто 03A9є 937, за винятком чотирьох шістнадцяткових цифр.)


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
Emoji роблять ці коди ще складніше набирати! \u{1F641}= 🙁
Користувач, який не є користувачем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.