Chèn ký tự Unicode vào JavaScript


133

Tôi cần chèn một Omega (Ω) vào trang html của mình. Tôi đang sử dụng mã thoát HTML của nó để làm điều đó, vì vậy tôi có thể viết Ωvà nhận. Đó là tất cả tốt và tốt khi tôi đặt nó vào một yếu tố HTML; tuy nhiên, khi tôi cố gắng đưa nó vào JS của mình, ví dụ var Omega = Ω, nó phân tích mã đó dưới dạng JS và toàn bộ điều này không hoạt động. Bất cứ ai biết làm thế nào để đi về điều này?


15
var Omega = "Ω";quá đơn giản?
Khỉ Heretic

6
Notepad không chấp nhận điều đó, nó chỉ viết O: P
Bluefire

13
@MikeMcCaughan Có nhưng nếu một nhà phát triển khác gặp rắc rối với việc mã hóa tệp nguồn, bạn đã mất ... Bạn sẽ luôn có ai đó nói "OOOOps tôi không biết rằng <giữ chỗ cho phần mềm> sử dụng CP1250 làm mã hóa mặc định và tôi không nhận thấy sự thay đổi nhỏ khi cam kết "hoặc" ký tự-cái gì? " ; =)
Samuel Rossille

3
@Bluefire chuyển sang trình soạn thảo văn bản tốt hơn hỗ trợ cài đặt mã hóa ký tự (ví dụ: notepad ++) và đặt thành UTF-8. Sau đó, bạn có thể viết chineese trong mã nguồn của mình nếu bạn muốn ... Hoặc ở trong danh mục ppl được nhắm mục tiêu bởi nhận xét đầu tiên của tôi; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille

4
@Bluefire, Notepad ++ sẽ xử lý tốt, bạn chỉ cần thay đổi Mã hóa trong menu thành UTF-8 hoặc UCS-2.
Khỉ Heretic

Câu trả lời:


195

Tôi đoán rằng bạn thực sự muốn Omegatrở thành một chuỗi chứa omega chữ hoa? Trong trường hợp đó, bạn có thể viết:

var Omega = '\u03A9';

(Vì Ω là ký tự Unicode với mật mã U + 03A9 ; nghĩa 03A9937, ngoại trừ được viết dưới dạng bốn chữ số thập lục phân.)


4
Và nếu người ta muốn tìm hiểu giá trị thập lục phân của chuỗi unicode là gì: Mothereff.in/js-escapes
StanE

Một cách khác để lấy giá trị thập lục phân cho chuỗi unicode từ trong JavaScript là: "" .codePointAt (0) .toString (16);
KostasX

53

Mặc dù @ruakh đã đưa ra một câu trả lời tốt, tôi sẽ thêm một số lựa chọn thay thế cho đầy đủ:

Thực tế bạn có thể sử dụng ngay cả var Omega = '&#937;'trong JavaScript, nhưng chỉ khi mã JavaScript của bạn là:

  • bên trong một thuộc tính sự kiện, như trong onclick="var Omega = '&#937'; alert(Omega)"hoặc
  • trong một scriptphần tử bên trong tài liệu XHTML (hoặc XHTML + XML) được cung cấp cùng với loại nội dung XML.

Trong các trường hợp này, mã sẽ là lần đầu tiên (trước khi được chuyển đến trình thông dịch JavaScript) được phân tích cú pháp bởi trình phân tích cú pháp HTML để các tham chiếu ký tự như &#937;được nhận ra. Các hạn chế làm cho điều này một cách tiếp cận không thực tế trong hầu hết các trường hợp.

Bạn cũng có thể nhập ký tự như vậy, như trong var Omega = 'Ω', nhưng sau đó mã hóa ký tự phải cho phép, mã hóa phải được khai báo đúng và bạn cần phần mềm cho phép bạn nhập các ký tự đó. Đây là một giải pháp sạch và khá khả thi nếu bạn sử dụng mã hóa UTF-8 cho mọi thứ và sẵn sàng đối phó với các vấn đề do nó tạo ra. Mã nguồn sẽ có thể đọc được và đọc nó, bạn sẽ thấy ngay ký tự đó, thay vì các ký hiệu mã. Mặt khác, nó có thể gây bất ngờ nếu người khác bắt đầu làm việc với mã của bạn.

Sử dụng \uký hiệu, như trong var Omega = '\u03A9', hoạt động độc lập với mã hóa ký tự, và nó trong thực tế gần như phổ biến. Tuy nhiên, nó chỉ có thể được sử dụng tối đa U + FFFF, tức là tối đa \uffff, nhưng hầu hết các nhân vật mà hầu hết mọi người từng nghe nói đều rơi vào khu vực đó. (Nếu bạn cần các ký tự cao hơn của Viking, bạn cần sử dụng các cặp thay thế hoặc một trong hai cách tiếp cận ở trên.)

Bạn cũng có thể xây dựng một ký tự bằng cách sử dụng String.fromCharCode()phương thức, chuyển dưới dạng tham số số Unicode, theo số thập phân như trong var Omega = String.fromCharCode(937)hoặc thập lục phân như trong var Omega = String.fromCharCode(0x3A9). Điều này hoạt động lên đến U + FFFF. Cách tiếp cận này có thể được sử dụng ngay cả khi bạn có số Unicode trong một biến.


18
Thời đại đã thay đổi, 5 năm sau, mọi người sử dụng những thứ gọi là "biểu tượng cảm xúc" ngoài U+FFFFphạm vi. JavaScript cũng vậy, vì vậy bạn có thể làm điều này. var poop = '\u{1F4A9}';
Người dùng không phải là người dùng

1
@Userthatisnotauser và đó phải là câu trả lời được chấp nhận!
Marten Koetsier

Làm cách nào bạn có thể chèn ký tự 'khóa mở' 'uD83D \ uDD13' bằng một mã là '0x1F512' trong JavaScript? Và tại sao chúng ta cần hai mã để chèn một ký tự?
tarekahf

5
@tarekahf Đây là một bài học ngắn về Unicode. UTF-16 chỉ kéo dài các điểm Unicode U + 0000 đến U + FFFF. Sau đó, Unicode đã phát triển và các chất thay thế được phát minh để UTF-16 có thể truy cập vào các điểm đó. Nhưng JavaScript chỉ có thể làm điều này ngay bây giờ: var lock = '\u{1F512}'Và bạn có được điều này:
Người dùng không phải là người dùng

4

Câu trả lời là đúng, nhưng bạn không cần phải khai báo một biến. Một chuỗi có thể chứa ký tự của bạn:

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

Thật không may, vẫn còn những mã trong ASCII để hiển thị UTF-8, nhưng tôi vẫn đang chờ đợi (vì quá nhiều năm ...) ngày mà UTF-8 sẽ giống như ASCII và ASCII sẽ chỉ là một sự tưởng nhớ quá khứ.


9
Biểu tượng cảm xúc làm cho các mã đó thậm chí khó nhập hơn! \u{1F641}= 🙁
Người dùng không phải là người dùng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.