Masukkan karakter Unicode ke dalam JavaScript

134

Saya harus memasukkan Omega (Ω) ke halaman html saya. Saya menggunakan kode HTML-nya untuk melakukan itu, jadi saya bisa menulis Ωdan mendapatkan Ω. Semua baik-baik saja dan baik ketika saya memasukkannya ke dalam elemen HTML; Namun, ketika saya mencoba untuk memasukkannya ke dalam JS saya, misalnya var Omega = Ω, ia mem-parsing kode itu sebagai JS dan semuanya tidak berfungsi. Adakah yang tahu bagaimana caranya?

Api biru
sumber
15
var Omega = "Ω";terlalu sederhana?
Monyet Sesat
6
Notepad tidak menerima itu, itu hanya menulis O: P
Bluefire
13
@MikeMcCaughan Ya tetapi jika pengembang lain mengacaukan penyandian file sumber, Anda telah kehilangan ... Anda akan selalu memiliki seseorang untuk mengatakan "OOOOps saya tidak tahu bahwa <placeholder untuk perangkat lunak> menggunakan CP1250 sebagai penyandian default dan saya tidak melihat perubahan kecil itu ketika melakukan "atau" karakter enco-apa? " ; =)
Samuel Rossille
3
@Bluefire beralih ke editor teks yang lebih baik yang mendukung pengaturan pengkodean karakter (mis. Notepad ++) dan atur ke UTF-8. Kemudian Anda dapat menulis chineese dalam kode sumber Anda jika Anda mau ... Atau tetap dalam kategori ppl yang ditargetkan oleh komentar pertama saya; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille
4
@ Bluefire, Notepad ++ harus menanganinya dengan baik, Anda hanya perlu mengubah Encoding pada menu menjadi UTF-8 atau UCS-2.
Monyet Sesat

Jawaban:

196

Saya menduga Anda benar-benar ingin Omegamenjadi string yang mengandung omega huruf besar? Dalam hal ini, Anda dapat menulis:

var Omega = '\u03A9';

(Karena Ω adalah karakter Unicode dengan codepoint U + 03A9 ; 03A9artinya 937, kecuali, ditulis sebagai empat digit heksadesimal.)

ruakh
sumber
4
Dan jika seseorang ingin mengetahui apa nilai heksadesimal untuk string unicode adalah: mothereff.in/js-escapes
StanE
Cara lain untuk memperoleh nilai heksadesimal untuk string unicode dari dalam JavaScript adalah: "Ω" .codePointAt (0) .toString (16);
KostasX
53

Meskipun @ruakh memberikan jawaban yang baik, saya akan menambahkan beberapa alternatif untuk kelengkapan:

Anda sebenarnya bisa menggunakan bahkan var Omega = '&#937;'dalam JavaScript, tetapi hanya jika kode JavaScript Anda adalah:

  • di dalam atribut acara, seperti pada onclick="var Omega = '&#937'; alert(Omega)"atau
  • dalam scriptelemen di dalam dokumen XHTML (atau XHTML + XML) yang disajikan dengan tipe konten XML.

Dalam kasus ini, kode akan menjadi yang pertama (sebelum diteruskan ke penerjemah JavaScript) diurai oleh parser HTML sehingga referensi karakter seperti &#937;dikenali. Pembatasan menjadikan ini pendekatan yang tidak praktis dalam banyak kasus.

Anda juga dapat memasukkan karakter Ω seperti itu, seperti dalam var Omega = 'Ω', tetapi kemudian pengkodean karakter harus memungkinkan, pengkodean harus dinyatakan dengan benar, dan Anda memerlukan perangkat lunak yang memungkinkan Anda memasukkan karakter tersebut. Ini adalah solusi bersih dan cukup layak jika Anda menggunakan pengkodean UTF-8 untuk semuanya dan siap untuk menangani masalah yang diciptakannya. Kode sumber akan dapat dibaca, dan membacanya, Anda segera melihat karakter itu sendiri, bukan notasi kode. Di sisi lain, ini dapat menyebabkan kejutan jika orang lain mulai bekerja dengan kode Anda.

Menggunakan \unotasi, seperti dalam var Omega = '\u03A9', bekerja secara independen dari pengkodean karakter, dan dalam praktiknya hampir universal. Namun demikian dapat digunakan hanya hingga U + FFFF, yaitu hingga \uffff, tetapi sebagian besar karakter yang kebanyakan orang pernah dengar jatuh ke daerah itu. (Jika Anda membutuhkan karakter "lebih tinggi", Anda perlu menggunakan pasangan pengganti atau salah satu dari dua pendekatan di atas.)

Anda juga dapat membangun karakter menggunakan String.fromCharCode()metode, meneruskan sebagai parameter nomor Unicode, dalam desimal seperti dalam var Omega = String.fromCharCode(937)atau dalam heksadesimal seperti pada var Omega = String.fromCharCode(0x3A9). Ini berfungsi hingga U + FFFF. Pendekatan ini dapat digunakan bahkan ketika Anda memiliki nomor Unicode dalam suatu variabel.

Jukka K. Korpela
sumber
18
Zaman telah berubah sekarang, 5 tahun kemudian, orang menggunakan hal-hal ini yang disebut "emoji" di luar U+FFFFjangkauan. JavaScript juga punya, jadi Anda bisa melakukan ini. var poop = '\u{1F4A9}';
Pengguna yang bukan pengguna
1
@Userthatisnotauser dan itu seharusnya jawaban yang diterima!
Marten Koetsier
Bagaimana Anda bisa memasukkan karakter 'kunci terbuka' '\ uD83D \ uDD13' menggunakan satu kode yaitu '0x1F512' di JavaScript? Dan mengapa kita membutuhkan dua kode untuk memasukkan satu karakter?
tarekahf
5
@tarekahf Ini pelajaran singkat tentang Unicode. UTF-16 hanya merentang poin Unicode U + 0000 ke U + FFFF. Kemudian Unicode tumbuh dan pengganti diciptakan sehingga UTF-16 dapat mengakses titik-titik tersebut. Tapi JavaScript bisa melakukannya sekarang: var lock = '\u{1F512}'Dan Anda mendapatkan ini: 🔓
Pengguna yang bukan pengguna
4

Jawabannya benar, tetapi Anda tidak perlu mendeklarasikan variabel. String dapat berisi karakter Anda:

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

Sayangnya masih kode-kode di ASCII diperlukan untuk menampilkan UTF-8, tapi saya masih menunggu (sejak bertahun-tahun ...) hari ketika UTF-8 akan sama dengan ASCII, dan ASCII hanya akan menjadi kenangan akan lalu.

fresko
sumber
9
Emoji membuat kode-kode itu lebih sulit untuk diketik! \u{1F641}= 🙁
Pengguna yang bukan pengguna