กลับไปหน้าบทความ

อ่าน 3 นาที

ลักษณะกว้าง

อักขระแบบกว้าง (Wide character ) เป็นชนิดข้อมูลอักขระ ในคอมพิวเตอร์ ที่มีขนาดโดยทั่วไปใหญ่กว่า อักขระ 8 บิตแบบ ดั้งเดิม ขนาดชนิดข้อมูลที่ใหญ่ขึ้นนี้ช่วยให้สามารถใช้ชุดอักขระ...

ลักษณะกว้าง

อักขระแบบกว้าง (Wide character ) เป็นชนิดข้อมูลอักขระ ในคอมพิวเตอร์ ที่มีขนาดโดยทั่วไปใหญ่กว่า อักขระ 8 บิตแบบ ดั้งเดิม ขนาดชนิดข้อมูลที่ใหญ่ขึ้นนี้ช่วยให้สามารถใช้ชุดอักขระ ที่เข้ารหัสขนาดใหญ่ขึ้น ได้

ประวัติศาสตร์

ในช่วงทศวรรษ 1960 ผู้ผลิตเมนเฟรมและมินิคอมพิวเตอร์เริ่มกำหนดมาตรฐานโดยใช้ ไบต์ 8 บิต เป็นหน่วยข้อมูลที่เล็กที่สุด ชุดอักขระ ASCII 7 บิตกลายเป็นวิธีการเข้ารหัส อักขระ ตัวอักษรและ ตัวเลขที่เป็นมาตรฐานในอุตสาหกรรม สำหรับเครื่องพิมพ์โทรเลขและเทอร์มินัลคอมพิวเตอร์บิตพิเศษนั้นใช้สำหรับตรวจสอบความถูกต้อง (parity) เพื่อให้มั่นใจในความสมบูรณ์ของข้อมูลที่จัดเก็บและส่งต่อ ด้วยเหตุนี้ ไบต์ 8 บิตจึงกลายเป็น หน่วยข้อมูล มาตรฐานสำหรับระบบคอมพิวเตอร์ที่จัดเก็บอักขระ ASCII ในหน่วยความจำ

ต่อมา ผู้ผลิตคอมพิวเตอร์เริ่มใช้บิตสำรองเพื่อขยายชุดอักขระ ASCII ให้กว้างกว่าชุดอักขระภาษาอังกฤษ ที่มีอยู่จำกัด ส่วนขยาย 8 บิตเช่น IBM code page 37, PETSCIIและISO 8859กลายเป็นเรื่องปกติ โดยให้การสนับสนุนเทอร์มินัลสำหรับภาษากรีกซิริลลิกและอื่นๆ อีกมากมาย อย่างไรก็ตาม ส่วนขยายเหล่านี้ยังคงมีข้อจำกัดตรงที่ใช้งานได้เฉพาะบางภูมิภาค และมักไม่สามารถใช้งานร่วมกันได้ ต้องใช้ขั้นตอนการแปลงพิเศษเพื่อแปลงจากชุดอักขระหนึ่งไปยังอีกชุดหนึ่ง ซึ่งมักส่งผลให้เกิดการแปลงที่ผิดพลาดเมื่อไม่มีอักขระที่เทียบเท่าอยู่ในชุดเป้าหมาย

ในปี 1989 องค์การมาตรฐานสากล (ISO) เริ่มดำเนินการพัฒนาชุดอักขระสากล (UCS) ซึ่งเป็นชุดอักขระหลายภาษาที่สามารถเข้ารหัสได้โดยใช้ค่า 16 บิต (2 ไบต์) หรือ 32 บิต (4 ไบต์) ค่าที่ใหญ่ขึ้นเหล่านี้จำเป็นต้องใช้ชนิดข้อมูลที่มีขนาดใหญ่กว่า 8 บิตในการจัดเก็บค่าอักขระใหม่ในหน่วยความจำ ดังนั้นจึงมีการใช้คำว่า "อักขระกว้าง" เพื่อแยกความแตกต่างจากชนิดข้อมูลอักขระ 8 บิตแบบดั้งเดิม

ความสัมพันธ์กับ UCS และ Unicode

คำว่า "อักขระกว้าง" หมายถึงขนาดของชนิดข้อมูลในหน่วยความจำ ไม่ได้ระบุว่าแต่ละค่าในชุดอักขระถูกกำหนดอย่างไร ค่าเหล่านั้นถูกกำหนดโดยใช้ชุดอักขระ โดย UCS และUnicodeเป็นเพียงสองชุดอักขระทั่วไปที่เข้ารหัสอักขระได้มากกว่าค่าตัวเลขกว้าง 8 บิต (รวม 255 ตัว)

ความสัมพันธ์กับอักขระหลายไบต์

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

มาตรฐานCแยกความแตกต่างระหว่าง การเข้ารหัสอักขระ แบบมัลติไบต์ซึ่งใช้จำนวนไบต์คงที่หรือแปรผันในการแสดงอักขระแต่ละตัว (ส่วนใหญ่ใช้ในซอร์สโค้ดและไฟล์ภายนอก) กับอักขระแบบไวด์ซึ่งเป็นการ แสดงอักขระ ในขณะรันไทม์ในอ็อบเจ็กต์เดียว (โดยทั่วไปมากกว่า 8 บิต)

ขนาดของตัวอักษรกว้าง

การนำUCS-2 ("Unicode 1.0") มาใช้ในช่วงแรกทำให้มีการใช้UTF-16 อย่างแพร่หลาย ในหลายแพลตฟอร์ม โดยเฉพาะอย่างยิ่งMicrosoft Windows , .NETและJavaในระบบเหล่านี้ มักจะมีชนิดข้อมูล "อักขระกว้าง" ( wchar_tใน C/C++; charใน Java) ขนาด 16 บิต ชนิดข้อมูลเหล่านี้ไม่ได้แมปโดยตรงกับ "อักขระ" เดียวเสมอไป เนื่องจาก จำเป็นต้องใช้ คู่ตัวแทนเพื่อจัดเก็บช่วงทั้งหมดของ Unicode (1996, Unicode 2.0) [ 1 ] [ 2 ] [ 3 ]

โดยทั่วไปแล้ว Unix-likeจะใช้ 32 บิตwchar_tเพื่อให้พอดีกับจุดรหัส Unicode 21 บิต ตามที่ C90 กำหนดไว้[ 4 ]

ขนาดของชนิดอักขระกว้างไม่ได้กำหนดว่าระบบสามารถประมวลผลการเข้ารหัสข้อความแบบใดได้ เนื่องจากมีการแปลงให้ใช้งานได้ (อย่างไรก็ตาม โค้ดการแปลงแบบเก่ามักจะมองข้ามอักขระทดแทน) สถานการณ์ทางประวัติศาสตร์ของการนำมาใช้ยังเป็นตัวกำหนดประเภทของการเข้ารหัสที่ระบบนั้นต้องการ อีกด้วย ระบบที่ได้รับอิทธิพลจาก Unicode 1.0 เช่น Windows มักจะใช้ "สตริงกว้าง" ที่สร้างจากหน่วยอักขระกว้างเป็นหลัก ในขณะที่ระบบอื่นๆ เช่น ระบบที่คล้าย Unix มักจะยังคงใช้แบบแผน "สตริงแคบ" 8 บิต โดยใช้การเข้ารหัสแบบหลายไบต์ (โดยทั่วไปคือ UTF-8) เพื่อจัดการกับอักขระ "กว้าง" [ 5 ]

รายละเอียดการเขียนโปรแกรม

ซี/ซี++

ไลบรารี มาตรฐานของภาษา CและC++มีฟังก์ชันหลายอย่างสำหรับการจัดการกับอักขระแบบกว้างและสตริงที่ประกอบด้วยอักขระแบบกว้าง อักขระแบบกว้างถูกกำหนดโดยใช้ชนิดข้อมูลwchar_tซึ่งใน มาตรฐาน C90 ดั้งเดิม ถูกกำหนดไว้ดังนี้

"ชนิดข้อมูลจำนวนเต็มที่มีช่วงค่าที่สามารถแทนรหัสที่แตกต่างกันสำหรับสมาชิกทั้งหมดของชุดอักขระขยายที่ใหญ่ที่สุดที่ระบุไว้ในกลุ่มภาษาที่รองรับ" (ISO 9899:1990 §4.1.5)

ทั้งภาษา C และC++ได้นำประเภทอักขระที่มีขนาดคงที่มาใช้char16_tและ ในการแก้ไขมาตรฐานในปี 2011 ก็ได้ให้การแสดงผลที่ชัดเจนสำหรับ รูปแบบการแปลงUnicodechar32_t 16 บิตและ 32 บิต โดยยังคงขึ้นอยู่กับการใช้งานของแต่ละระบบ มาตรฐาน Unicode ISO/IEC 10646:2003 เวอร์ชัน 4.0 ระบุว่า: wchar_t

"ความกว้างของขึ้นwchar_tอยู่กับคอมไพเลอร์โดยเฉพาะและอาจมีขนาดเล็กสุดเพียง 8 บิต ดังนั้นโปรแกรมที่ต้องพกพาได้กับคอมไพเลอร์ C หรือ C++ ใดๆ ก็ไม่ควรใช้wchar_tเพื่อจัดเก็บข้อความ Unicode wchar_tประเภทนี้มีไว้สำหรับจัดเก็บอักขระกว้างที่กำหนดโดยคอมไพเลอร์ ซึ่งอาจเป็น อักขระ Unicodeในคอมไพเลอร์บางตัว" [ 6 ]

ไพธอน

ตาม เอกสารของ Python 2.7 ภาษาดังกล่าวบางครั้งใช้wchar_tเป็นพื้นฐานสำหรับประเภทอักขระPy_UNICODEขึ้นอยู่กับว่าwchar_t"เข้ากันได้กับรูปแบบการสร้าง Unicode ของ Python ที่เลือก" บนระบบนั้น หรือไม่ [ 7 ]ความแตกต่างนี้ถูกยกเลิกตั้งแต่ Python 3.3 ซึ่งได้แนะนำการจัดเก็บ UCS1/2/4 ที่มีขนาดยืดหยุ่นสำหรับสตริงและถูกกำหนดชื่อแทนอย่างเป็นทางการเป็นPy_UNICODE[ 8 ] ตั้งแต่ Python 3.12 การใช้เช่นtypedefสำหรับสตริง Python (wstr ในการใช้งาน) ได้ถูกยกเลิก และยังคงเหมือนเดิมคือ " มีการสร้างการแสดง UTF-8ตามความต้องการและแคชไว้ในออบเจ็กต์ Unicode" [ 9 ]wchar_twchar_tPy_UNICODE

สนิม

ในRust ค่า a charคือ 32 บิตและแทนค่าสเกลาร์ Unicode [ 10 ]

  • มาตรฐานยูนิโค้ด เวอร์ชัน 4.0 - ฉบับออนไลน์
  • ฟังก์ชันอักขระแบบกว้างในภาษา C @ Java2S
  • ฟังก์ชัน Unicode ของ Java @ Java2S
  • Multibyte (3) Man Page @ FreeBSD.org
  • อักขระหลายไบต์และอักขระกว้าง @ เครือข่ายนักพัฒนาของ Microsoft
  • ชุดอักขระของ Windows @ เครือข่ายนักพัฒนาของ Microsoft
  • เอกสารอ้างอิงการเขียนโปรแกรม Unicode และชุดอักขระ @ เครือข่ายนักพัฒนาของ Microsoft
  • รักษาความเรียบง่ายของการรองรับอักขระหลายไบต์ @ EuroBSDCon, เบลเกรด, 25 กันยายน 2016
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Wide_character&oldid=1310111985 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ลักษณะกว้าง

อักขระแบบกว้าง (Wide character ) เป็นชนิดข้อมูลอักขระ ในคอมพิวเตอร์ ที่มีขนาดโดยทั่วไปใหญ่กว่า อักขระ 8 บิตแบบ ดั้งเดิม ขนาดชนิดข้อมูลที่ใหญ่ขึ้นนี้ช่วยให้สามารถใช้ชุดอักขระ...

ประวัติศาสตร์

ในช่วงทศวรรษ 1960 ผู้ผลิตเมนเฟรมและมินิคอมพิวเตอร์เริ่มกำหนดมาตรฐานโดยใช้ ไบต์ 8 บิต เป็นหน่วยข้อมูลที่เล็กที่สุด ชุดอักขระ ASCII 7 บิตกลายเป็นวิธีการเข้ารหัส อักขระ ตัวอักษรและ ตัวเลขที่เป็นมาตรฐานในอุตสาหกรรม สำหรับ เครื่องพิมพ์โทรเลข และ...

ความสัมพันธ์กับ UCS และ Unicode

คำว่า "อักขระกว้าง" หมายถึงขนาดของชนิดข้อมูลในหน่วยความจำ ไม่ได้ระบุว่าแต่ละค่าในชุดอักขระถูกกำหนดอย่างไร ค่าเหล่านั้นถูกกำหนดโดยใช้ชุดอักขระ โดย UCS และ Unicode เป็นเพียงสองชุดอักขระทั่วไปที่เข้ารหัสอักขระได้มากกว่าค่าตัวเลขกว้าง 8 บิต (รวม 255 ตัว)

ความสัมพันธ์กับอักขระหลายไบต์

เช่นเดียวกับระบบส่งข้อมูลรุ่นก่อนๆ ที่ประสบปัญหาจากการขาด เส้นทางข้อมูล ที่สะอาดสำหรับข้อมูล 8 บิต ระบบส่งข้อมูลสมัยใหม่มักขาดการรองรับเส้นทางข้อมูล 16 บิตหรือ 32 บิตสำหรับข้อมูลตัวอักษร สิ่งนี้จึงนำไปสู่ระบบการเข้ารหัสตัวอักษร เช่น UTF-8 ที่สามารถใช้...