ฉันคิดว่าเหตุผลนั้นเร็วอาเรย์ชอบเข้าถึงตัวละครที่ดัชนี แต่ตัวละครบางตัวไม่พอดีกับ 16 บิตดังนั้นมันจะไม่ทำงาน ...
ดังนั้นถ้าคุณต้องจัดการกับกรณีพิเศษอยู่แล้วทำไมไม่ใช้ UTF-8 ล่ะ?
ฉันคิดว่าเหตุผลนั้นเร็วอาเรย์ชอบเข้าถึงตัวละครที่ดัชนี แต่ตัวละครบางตัวไม่พอดีกับ 16 บิตดังนั้นมันจะไม่ทำงาน ...
ดังนั้นถ้าคุณต้องจัดการกับกรณีพิเศษอยู่แล้วทำไมไม่ใช้ UTF-8 ล่ะ?
คำตอบ:
เพราะเคยเป็นUCS-2ซึ่งเป็นความยาวคงที่ที่ดี 16-bits แน่นอนว่า 16 บิตนั้นยังไม่เพียงพอ พวกเขาดัดแปลง UTF-16 ไว้ด้านบน
Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.
ในขณะที่ Java รุ่น UTF-16 ยังไม่ปรากฏขึ้นและ UTF-8 ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน Unicode
สำหรับส่วนหลักเพื่อประโยชน์ในการพิสูจน์อักษรธรรมดาและเรียบง่ายในอนาคต ไม่ว่าจะเป็นเหตุผลที่เข้าใจผิดและวิธีการที่ผิดเกี่ยวกับมันเป็นคำถามที่แตกต่างกัน
คุณสามารถเห็นเหตุผลบางอย่างที่อยู่เบื้องหลังการตัดสินใจออกแบบของพวกเขาในเอกสารนี้เกี่ยวกับ 2004 สลับเป็น Java 5 และ UTF-16 ซึ่งอธิบายข้อบกพร่องบางอย่างเช่น: อักขระเสริมในแพลตฟอร์ม Javaและดูว่าทำไมระบบนิเวศ Java ใช้ การเข้ารหัสที่แตกต่างกันตลอดทั้งกอง? .
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดในการใช้ UTF-16 และทำไม UTF-8 จึงน่าจะเป็นตัวเลือกที่ดีกว่าโดยทั่วไปดูUTF-16 ควรพิจารณาว่าเป็นอันตรายหรือไม่ และUTF-8 ทุก ๆรายการ
string
เป็นประเภท "พิเศษ" ใน Java (เหมือนมากArray
) แทนที่จะString
เป็นคลาส "ธรรมดา" ซึ่งมีการอ้างอิงถึงอาร์เรย์ "ธรรมดา" ที่มีอักขระจริง ขึ้นอยู่กับวิธีสร้างสตริง UTF-8, UTF-16 หรือแม้แต่ UTF-32 อาจเป็นวิธีการจัดเก็บที่มีประสิทธิภาพที่สุด ฉันไม่คิดว่าจะมีวิธีที่มีประสิทธิภาพเป็นพิเศษสำหรับคลาส "ธรรมดา" String
ในการจัดการหลายรูปแบบ แต่ประเภท "พิเศษ" ที่มีการสนับสนุน JVM สามารถทำได้