แทรกอักขระ Unicode ลงใน JavaScript


137

ฉันต้องการใส่ Omega (Ω) ลงในหน้า html ของฉัน ฉันใช้โค้ดหนี HTML เพื่อทำเช่นนั้นฉันจึงสามารถเขียนΩและรับΩได้ นั่นคือทั้งหมดที่ดีและเมื่อฉันใส่ลงในองค์ประกอบ HTML อย่างไรก็ตามเมื่อฉันพยายามใส่ลงใน JS ของฉันเช่นvar Omega = Ωมันจะแยกวิเคราะห์รหัสนั้นเป็น JS และทุกอย่างไม่ทำงาน ใครรู้วิธีไปเกี่ยวกับเรื่องนี้


15
var Omega = "Ω";ง่ายเกินไป?
ลิงนอกรีต

6
Notepad ไม่ยอมรับมันเขียน O: P
Bluefire

13
@MikeMcCaughan ใช่ แต่ถ้านักพัฒนาคนอื่นมายุ่งกับการเข้ารหัสของไฟล์ต้นฉบับคุณก็แพ้ ... คุณมักจะมีคนพูดว่า "OOOOps ฉันไม่รู้ว่า <ตัวยึดสำหรับซอฟต์แวร์> ใช้ CP1250 เป็นค่าเริ่มต้นการเข้ารหัสและฉัน ไม่ได้สังเกตว่ามีการเปลี่ยนแปลงเล็กน้อยเมื่อมีการกระทำ "หรือ" character enco-what? " ; =)
Samuel Rossille

3
@Bluefire เปลี่ยนไปใช้โปรแกรมแก้ไขข้อความที่ดีกว่าซึ่งรองรับการตั้งค่าการเข้ารหัสอักขระ (เช่น notepad ++) และตั้งค่าเป็น UTF-8 จากนั้นคุณสามารถเขียน chineese ในซอร์สโค้ดของคุณหากคุณต้องการ ... หรืออยู่ในหมวดหมู่ของ ppl ที่กำหนดเป้าหมายตามความคิดเห็นแรกของฉัน =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille

4
@Bluefire, Notepad ++ ควรจัดการได้ดีคุณเพียงแค่ต้องเปลี่ยนการเข้ารหัสในเมนูเป็น UTF-8 หรือ UCS-2
ลิงนอกรีต

คำตอบ:


204

ฉันเดาว่าคุณอยากOmegaเป็นสตริงที่มีโอเมก้าตัวพิมพ์ใหญ่ใช่ไหม ในกรณีนี้คุณสามารถเขียน:

var Omega = '\u03A9';

(เนื่องจากΩเป็นอักขระ Unicode ที่มีจุดรหัส U + 03A9นั่น03A9คือ937ยกเว้นเขียนเป็นเลขฐานสิบหกสี่หลัก)


4
และหากต้องการทราบว่าค่าเลขฐานสิบหกสำหรับสตริง Unicode คืออะไร: mothereff.in/js-escapes
StanE

อีกวิธีหนึ่งในการหาค่าฐานสิบหกสำหรับสตริง Unicode จากภายใน JavaScript คือ: "Ω" .codePointAt (0) .toString (16);
KostasX

55

แม้ว่า @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 ในตัวแปรก็ตาม


19
เวลาได้เปลี่ยนไปแล้ว 5 ปีต่อมาผู้คนใช้สิ่งเหล่านี้ที่เรียกว่า "อีโมจิ" นอกU+FFFFช่วง JavaScript ก็มีเช่นกันดังนั้นคุณสามารถทำได้ var poop = '\u{1F4A9}';
ผู้ใช้ที่ไม่ใช่ผู้ใช้

1
@Userthatisnotauser และนั่นควรเป็นคำตอบที่ได้รับการยอมรับ!
Marten Koetsier

คุณสามารถแทรกอักขระ 'open lock' \ uD83D \ uDD13 โดยใช้รหัสเดียวที่เป็น '0x1F512' ใน JavaScript ได้อย่างไร และทำไมเราต้องใช้รหัสสองตัวเพื่อแทรกอักขระหนึ่งตัว?
tarekahf

6
@tarekahf นี่คือบทเรียนสั้น ๆ เกี่ยวกับ Unicode UTF-16 ขยายเฉพาะจุด Unicode U + 0000 ถึง U + FFFF จากนั้น Unicode ก็เติบโตขึ้นและมีการคิดค้นตัวแทนเพื่อให้ UTF-16 สามารถเข้าถึงจุดเหล่านั้นได้ แต่ JavaScript สามารถทำได้ตอนนี้: var lock = '\u{1F512}'และคุณจะได้รับสิ่งนี้: 🔓
ผู้ใช้ที่ไม่ใช่ผู้ใช้

5

คำตอบนั้นถูกต้อง แต่คุณไม่จำเป็นต้องประกาศตัวแปร สตริงสามารถมีอักขระของคุณ:

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

น่าเสียดายที่รหัสเหล่านั้นใน ASCII ยังจำเป็นสำหรับการแสดง UTF-8 แต่ฉันยังคงรอ (เนื่องจากหลายปีเกินไป ... ) วันที่ UTF-8 จะเหมือนกับ ASCII และ ASCII จะเป็นเพียงการรำลึกถึง ที่ผ่านมา.


10
อีโมจิทำให้รหัสเหล่านั้นพิมพ์ยากขึ้น! \u{1F641}= 🙁
ผู้ใช้ที่ไม่ใช่ผู้ใช้

2

ทางเลือกหนึ่งคือใส่อักขระลงในสคริปต์ของคุณอย่างแท้จริงเช่น:

const omega = 'Ω';

สิ่งนี้ต้องการให้คุณแจ้งให้เบราว์เซอร์ทราบการเข้ารหัสต้นทางที่ถูกต้องโปรดดูUnicode ใน JavaScript

อย่างไรก็ตามหากคุณทำไม่ได้หรือไม่ต้องการทำเช่นนี้ (เช่นเนื่องจากอักขระแปลกใหม่เกินไปและคาดว่าจะมีอยู่ในฟอนต์ตัวแก้ไขโค้ดไม่ได้) ตัวเลือกที่ปลอดภัยที่สุดคือการใช้สตริงรูปแบบใหม่ หลบหนีหรือString.fromCodePoint:

const omega = '\u{3a9}';

// or:

const omega = String.fromCodePoint(0x3a9);

สิ่งนี้ไม่ จำกัด เฉพาะ UTF-16 แต่ใช้ได้กับจุดรหัสยูนิโคดทั้งหมด ในการเปรียบเทียบแนวทางอื่น ๆ ที่กล่าวถึงนี้มีข้อเสียดังต่อไปนี้:

  • HTML const omega = '&#937';Escape ( ): ใช้ได้เฉพาะเมื่อแสดงผลโดยไม่ใช้ Escape ในองค์ประกอบ HTML
  • สตริงแบบเก่า Escape ( const omega = '\u03A9';): จำกัด เฉพาะ UTF-16
  • String.fromCharCode: จำกัด เฉพาะ UTF-16
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.