UTF-8: Unicode TransformFormat-8bit, BOM ได้รับอนุญาต แต่โดยปกติจะไม่รวม BOM เป็นการเข้ารหัสแบบหลายไบต์ที่ใช้ในการแก้อักขระสากล โดยจะใช้ 8 บิต (นั่นคือ 1 ไบต์) สำหรับภาษาอังกฤษ และ 24 บิต (3 ไบต์) สำหรับภาษาจีน UTF-8 มีอักขระที่ทุกประเทศทั่วโลกใช้ เป็นการเข้ารหัสระดับสากลและมีความหลากหลายสูง ข้อความที่เข้ารหัส UTF-8 สามารถแสดงบนเบราว์เซอร์ในประเทศต่างๆ ที่รองรับชุดอักขระ UTF8 ตัวอย่างเช่น หากเป็นการเข้ารหัส UTF8 ภาษาจีนก็สามารถแสดงบน IE ภาษาอังกฤษของชาวต่างชาติได้ และพวกเขาไม่จำเป็นต้องดาวน์โหลดแพ็คเกจสนับสนุนภาษาจีนของ IE
GBK เป็นมาตรฐานที่อิงจากมาตรฐานแห่งชาติ GB2312 และขยายให้เข้ากันได้กับ GB2312 การเข้ารหัสข้อความของ GBK จะแสดงด้วยไบต์คู่ กล่าวคือ ทั้งอักขระภาษาจีนและภาษาอังกฤษจะแสดงด้วยไบต์คู่ GBK มีอักขระภาษาจีนทั้งหมดและเป็นการเข้ารหัสระดับประเทศ มีความหลากหลายน้อยกว่า UTF8 แต่ UTF8 ใช้ฐานข้อมูลที่ใหญ่กว่า GBD
GBK, GB2312 ฯลฯ จะต้องแปลงเป็น UTF8 ผ่านการเข้ารหัส Unicode:
GBK, GB2312--ยูนิโค้ด--UTF8
UTF8--ยูนิโค้ด--GBK, GB2312
สำหรับเว็บไซต์หรือกระดานสนทนา หากมีตัวอักษรภาษาอังกฤษจำนวนมาก ขอแนะนำให้ใช้ UTF-8 เพื่อประหยัดพื้นที่ อย่างไรก็ตาม ปลั๊กอินฟอรัมจำนวนมากโดยทั่วไปรองรับเฉพาะ GBK เท่านั้น
คำอธิบายโดยละเอียดเกี่ยวกับความแตกต่างระหว่างการเข้ารหัส พูดง่ายๆ ก็คือ unicode, gbk และ big five codes คือค่าที่เข้ารหัส และ utf-8, uft-16 และอื่นๆ ที่คล้ายกันคือนิพจน์ของค่านี้ รหัสสามรหัสก่อนหน้านั้นเข้ากันได้ สำหรับตัวอักษรจีนตัวเดียวกันค่ารหัสทั้งสามนั้นแตกต่างกันโดยสิ้นเชิง ตัวอย่างเช่น ค่า uncode ของ "Han" แตกต่างจาก gbk สมมติว่า uncode คือ a040 และ gbk คือ b030 และโค้ด uft-8 เป็นรูปแบบที่แสดงค่านั้น รหัส utf-8 ได้รับการจัดระเบียบอย่างสมบูรณ์สำหรับการถอดรหัสเท่านั้น หาก GBK ต้องการแปลงเป็น UTF-8 จะต้องแปลงเป็น uncode ก่อน จากนั้นจึงแปลงเป็น utf-8 เท่านี้ก็เรียบร้อย
สำหรับรายละเอียด โปรดดูบทความที่พิมพ์ซ้ำด้านล่าง
เรามาพูดถึงการเข้ารหัส Unicode และอธิบายคำศัพท์สั้นๆ เช่น UCS, UTF, BMP และ BOM กันดีกว่า นี่เป็นบทความที่น่าสนใจที่เขียนโดยโปรแกรมเมอร์สำหรับโปรแกรมเมอร์ สิ่งที่เรียกว่าความสนุกหมายความว่าคุณสามารถเข้าใจแนวคิดที่ไม่ชัดเจนก่อนหน้านี้ได้อย่างง่ายดาย และพัฒนาความรู้ของคุณ ซึ่งคล้ายกับการอัพเกรดในเกม RPG แรงจูงใจในการจัดระเบียบบทความนี้มีสองคำถาม:
คำถามที่หนึ่ง:
การใช้ "บันทึกเป็น" ใน Windows Notepad คุณสามารถแปลงระหว่างวิธีการเข้ารหัส GBK, Unicode, Unicode big endian และ UTF-8 ได้ หรือคุณสามารถไปที่ http://www.knowsky.com/tools/utf8.asp โดยตรงเพื่อการแปลงออนไลน์
นอกจากนี้ยังเป็นไฟล์ txt Windows ระบุวิธีการเข้ารหัสได้อย่างไร
ฉันค้นพบเมื่อนานมาแล้วว่าไฟล์ txt ที่เข้ารหัส Unicode, Unicode bigendian และ UTF-8 จะมีไบต์เพิ่มอีกสองสามไบต์ที่จุดเริ่มต้น ซึ่งได้แก่ FF, FE (Unicode), FE, FF (Unicode bigendian), EF, BB, BF (UTF-8) แต่เครื่องหมายเหล่านี้ใช้เกณฑ์อะไร
คำถามที่สอง:
เมื่อเร็ว ๆ นี้ฉันเห็น ConvertUTF.c บนอินเทอร์เน็ตซึ่งตระหนักถึงการแปลงร่วมกันของ UTF-32, UTF-16 และ UTF-8 ฉันรู้เกี่ยวกับวิธีการเข้ารหัสเช่น Unicode (UCS2), GBK และ UTF-8 แล้ว แต่โปรแกรมนี้ทำให้ฉันสับสนเล็กน้อย และฉันจำไม่ได้ว่าความสัมพันธ์ระหว่าง UTF-16 และ UCS2 คืออะไร
หลังจากตรวจสอบข้อมูลที่เกี่ยวข้องแล้ว ในที่สุดฉันก็ได้ชี้แจงปัญหาเหล่านี้และได้เรียนรู้รายละเอียดบางอย่างเกี่ยวกับ Unicode ด้วย เขียนบทความและส่งให้เพื่อนที่มีคำถามคล้ายกัน บทความนี้เขียนขึ้นให้เข้าใจง่ายที่สุดเท่าที่จะเป็นไปได้ แต่ผู้อ่านจำเป็นต้องทราบว่าไบต์คืออะไรและเลขฐานสิบหกคืออะไร
0. เอนเดียนใหญ่และเอนเดียนเล็ก
big endian และ little endian เป็นวิธีที่แตกต่างกันที่ CPU จัดการกับตัวเลขหลายไบต์ ตัวอย่างเช่น การเข้ารหัส Unicode ของอักขระ "汉" คือ 6C49 แล้วเมื่อเขียนลงไฟล์ 6C ควรเขียนไว้ข้างหน้าหรือ 49 ควรเขียนไว้ข้างหน้า? ถ้าเขียน 6C นำหน้า แสดงว่า big endian ถ้าเขียน 49 นำหน้า จะเป็น endian เล็กน้อย
คำว่า endian มาจากคำว่า Gulliver's Travels สงครามกลางเมืองในลิลลิพุตมีสาเหตุมาจากการที่จะทำลายไข่ของพวกบิ๊กเอนเดียนหรือลิตเติ้ลเอนเดียน ส่งผลให้มีการกบฏเกิดขึ้นถึง 6 จักรพรรดิ องค์หนึ่งสิ้นพระชนม์ และอีกองค์หนึ่งสูญเสียราชบัลลังก์
โดยทั่วไปเราแปล endian เป็น "ลำดับไบต์" และ endian ใหญ่และ endian เล็กเรียกว่า "big end" และ "little end"
1. การเข้ารหัสอักขระและโค้ดภายใน อย่างไรก็ตาม อักขระการเข้ารหัสอักขระภาษาจีนจะต้องได้รับการเข้ารหัสก่อนจึงจะสามารถประมวลผลโดยคอมพิวเตอร์ได้ วิธีการเข้ารหัสเริ่มต้นที่คอมพิวเตอร์ใช้คือรหัสภายในของคอมพิวเตอร์ คอมพิวเตอร์ในยุคแรกๆ ใช้การเข้ารหัส ASCII 7 บิต เพื่อประมวลผลอักขระภาษาจีน โปรแกรมเมอร์ได้ออกแบบ GB2312 สำหรับภาษาจีนตัวย่อ และ big5 สำหรับภาษาจีนตัวเต็ม
RFC2781 และ RFC3629 ของ IETF อธิบายวิธีการเข้ารหัสของ UTF-16 และ UTF-8 อย่างชัดเจน ชัดเจน และเข้มงวดในรูปแบบ RFC ที่สอดคล้องกัน ฉันลืมไปเสมอว่า IETF เป็นตัวย่อของ Internet Engineering Task Force อย่างไรก็ตาม RFC ที่ดูแลโดย IETF นั้นเป็นพื้นฐานสำหรับข้อกำหนดทั้งหมดบนอินเทอร์เน็ต
2.1. รหัสภายในและรหัสหน้า
ปัจจุบันเคอร์เนลของ Windows รองรับชุดอักขระ Unicode แล้ว ดังนั้นเคอร์เนลจึงสามารถรองรับทุกภาษาในโลกได้ อย่างไรก็ตาม เนื่องจากโปรแกรมและเอกสารที่มีอยู่จำนวนมากใช้การเข้ารหัสภาษาบางอย่าง เช่น GBK จึงเป็นไปไม่ได้ที่ Windows จะไม่รองรับการเข้ารหัสที่มีอยู่ และทั้งหมดใช้ Unicode
Windows ใช้โค้ดเพจเพื่อปรับให้เข้ากับประเทศและภูมิภาคต่างๆ โค้ดเพจสามารถเข้าใจได้ว่าเป็นโค้ดภายในที่กล่าวถึงก่อนหน้านี้ โค้ดเพจที่สอดคล้องกับ GBK คือ CP936
Microsoft ยังกำหนดโค้ดเพจสำหรับ GB18030: CP54936 อย่างไรก็ตาม เนื่องจาก GB18030 มีการเข้ารหัสขนาด 4 ไบต์บางส่วน และโค้ดเพจของ Windows รองรับเฉพาะการเข้ารหัสแบบไบต์เดียวและไบต์คู่เท่านั้น โค้ดเพจนี้จึงไม่สามารถใช้งานได้จริง
3. UCS-2, UCS-4, BMP
UCS มีสองรูปแบบ: UCS-2 และ UCS-4 ตามชื่อที่แนะนำ UCS-2 ถูกเข้ารหัสด้วยสองไบต์ และ UCS-4 ถูกเข้ารหัสด้วย 4 ไบต์ (จริงๆ แล้วใช้เพียง 31 บิตเท่านั้น บิตสูงสุดต้องเป็น 0) มาเล่นเกมคณิตศาสตร์ง่ายๆ กัน:
UCS-2 มีจุดโค้ด 2^16=65536 จุด และ UCS-4 มีจุดโค้ด 2^31=2147483648
UCS-4 แบ่งออกเป็น 2^7=128 กลุ่มตามไบต์สูงสุดโดยบิตสูงสุดคือ 0 แต่ละกลุ่มแบ่งออกเป็น 256 ระนาบตามไบต์สูงสุดถัดไป แต่ละระนาบแบ่งออกเป็น 256 แถวตามไบต์ที่สาม และแต่ละแถวมี 256 เซลล์ แน่นอนว่า เซลล์ในแถวเดียวกันต่างกันเพียงไบต์สุดท้ายเท่านั้น และเซลล์ที่เหลือก็เหมือนกัน
ระนาบ 0 ของกลุ่ม 0 เรียกว่า Basic Multilingual Plane หรือ BMP หรือใน UCS-4 บิตโค้ดที่มีสองไบต์บนเป็น 0 เรียกว่า BMP
ได้รับ UCS-2 โดยการลบศูนย์ไบต์สองตัวแรกของ BMP ของ UCS-4 เพิ่มศูนย์ไบต์สองไบต์หน้า UCS-2 สองไบต์เพื่อรับ BMP ของ UCS-4 ไม่มีการจัดสรรอักขระภายนอก BMP ในข้อกำหนด UCS-4 ปัจจุบัน
4. การเข้ารหัส UTF
UTF-8 เข้ารหัส UCS ในหน่วย 8 บิต การเข้ารหัสจาก UCS-2 ถึง UTF-8 เป็นดังนี้:
การเข้ารหัส UCS-2 (เลขฐานสิบหก) สตรีมไบต์ UTF-8 (ไบนารี)
0000-007F 0xxxxxxx
0080-07FF 110xxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
ตัวอย่างเช่น การเข้ารหัส Unicode ของ "ภาษาจีน" คือ 6C49 อยู่ระหว่าง 0800-FFFF ดังนั้นคุณต้องใช้เทมเพลตขนาด 3 ไบต์: 1110xxxx 10xxxxxx10xxxxxx การเขียน 6C49 ในไบนารี่คือ: 0110 110001 001001 การใช้บิตสตรีมนี้เพื่อแทนที่ x ในเทมเพลต เราจะได้: 1110011010110001 10001001 ซึ่งก็คือ E6 B1 89
ผู้อ่านสามารถใช้ Notepad เพื่อทดสอบว่าการเข้ารหัสของเราถูกต้องหรือไม่ ควรสังเกตว่า UltraEdit จะแปลงเป็น UTF-16 โดยอัตโนมัติเมื่อเปิดไฟล์ข้อความที่เข้ารหัส UTF-8 ซึ่งอาจทำให้เกิดความสับสน คุณสามารถปิดตัวเลือกนี้ได้ในการตั้งค่า เครื่องมือที่ดีกว่าคือ Hex Workshop
UTF-16 เข้ารหัส UCS ในหน่วย 16 บิต สำหรับรหัส UCS ที่น้อยกว่า 0x10000 การเข้ารหัส UTF-16 จะเท่ากับจำนวนเต็ม 16 บิตที่ไม่ได้ลงนามซึ่งสอดคล้องกับรหัส UCS สำหรับรหัส UCS ไม่น้อยกว่า 0x10000 จะมีการกำหนดอัลกอริทึม อย่างไรก็ตาม เนื่องจาก BMP ของ UCS2 หรือ UCS4 ที่ใช้งานจริงจะต้องน้อยกว่า 0x10000 ในตอนนี้จึงถือว่า UTF-16 และ UCS-2 โดยพื้นฐานแล้วเหมือนกัน อย่างไรก็ตาม UCS-2 เป็นเพียงรูปแบบการเข้ารหัส และใช้ UTF-16 สำหรับการส่งข้อมูลจริง ดังนั้นจึงจำเป็นต้องพิจารณาปัญหาลำดับไบต์ด้วย
5. ลำดับไบต์ UTF และ BOM
UTF-8 ใช้ไบต์เป็นหน่วยการเข้ารหัสและไม่มีปัญหาเรื่องความสิ้นสุด UTF-16 ใช้ 2 ไบต์เป็นหน่วยการเข้ารหัส ก่อนที่จะตีความข้อความ UTF-16 คุณต้องเข้าใจลำดับไบต์ของแต่ละหน่วยการเข้ารหัสก่อน ตัวอย่างเช่น การเข้ารหัส Unicode ของ "Kui" คือ 594E และการเข้ารหัส Unicode ของ "B" คือ 4E59 หากเราได้รับสตรีม UTF-16 ไบต์ "594E" นี่คือ "Ku" หรือ "B"
วิธีที่แนะนำในการทำเครื่องหมายลำดับไบต์ในข้อกำหนด Unicode คือ BOM BOM ไม่ใช่รายการ BOM ของ "Bill Of Material" แต่เป็น Byte order Mark BOM เป็นแนวคิดที่ฉลาดนิดหน่อย:
มีอักขระชื่อ "ZERO WIDTH NO-BREAKSPACE" ในการเข้ารหัส UCS และการเข้ารหัสคือ FEFF FFFE เป็นอักขระที่ไม่มีอยู่ใน UCS ดังนั้นจึงไม่ควรปรากฏในการส่งสัญญาณจริง ข้อกำหนด UCS แนะนำให้เราส่งอักขระ "ZERO WIDTH NO-BREAK SPACE" ก่อนที่จะส่งสตรีมไบต์
ด้วยวิธีนี้ หากผู้รับได้รับ FEFF ก็แสดงว่าสตรีมไบต์นั้นเป็น Big-Endian หากได้รับ FFFE ก็แสดงว่าสตรีมไบต์นั้นเป็น Little-Endian ดังนั้นอักขระ "ZERO WIDTH NO-BREAK SPACE" จึงถูกเรียกว่า BOM
UTF-8 ไม่จำเป็นต้องมี BOM เพื่อระบุลำดับไบต์ แต่สามารถใช้ BOM เพื่อระบุวิธีการเข้ารหัสได้ การเข้ารหัส UTF-8 ของอักขระ "ZERO WIDTH NO-BREAKSPACE" คือ EF BB BF (ผู้อ่านสามารถตรวจสอบได้โดยใช้วิธีการเข้ารหัสที่เราแนะนำไปก่อนหน้านี้) ดังนั้นหากผู้รับได้รับสตรีมไบต์ที่เริ่มต้นด้วย EF BBBF ก็จะรู้ว่ามีการเข้ารหัส UTF-8
Windows ใช้ BOM เพื่อทำเครื่องหมายการเข้ารหัสไฟล์ข้อความ
6. เอกสารอ้างอิงเพิ่มเติม เอกสารอ้างอิงหลักสำหรับบทความนี้คือ "ภาพรวมโดยย่อของ ISO-IEC 10646 และ Unicode" ( http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html )
ฉันยังพบข้อมูลสองชิ้นที่ดูดี แต่เนื่องจากฉันมีคำตอบสำหรับคำถามเริ่มแรกแล้ว ฉันจึงไม่ได้อ่านข้อมูลเหล่านั้น:
"การทำความเข้าใจ Unicode การแนะนำทั่วไปเกี่ยวกับ Unicode Standard" ( http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a )
"พื้นฐานการเข้ารหัสชุดอักขระ ทำความเข้าใจการเข้ารหัสชุดอักขระและการเข้ารหัสแบบเดิม" ( http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03 )
ฉันได้เขียนแพ็คเกจซอฟต์แวร์สำหรับการแปลง UTF-8, UCS-2 และ GBK ไปและกลับระหว่างกัน รวมถึงเวอร์ชันที่ใช้ Windows API และเวอร์ชันที่ไม่ได้ใช้ Windows API ถ้าฉันมีเวลาว่างในอนาคต ฉันจะจัดเรียงมันและนำไปไว้ที่หน้าแรกส่วนตัวของฉัน ( http://fmddlmyy.home4u.china.com )
ฉันเริ่มเขียนบทความนี้หลังจากคิดทบทวนประเด็นทั้งหมดแล้ว ฉันคิดว่าจะจบได้ในอีกไม่นาน โดยไม่คาดคิด การพิจารณาถ้อยคำและตรวจสอบรายละเอียดใช้เวลานานมาก โดยไม่คาดคิด ฉันเขียนไว้ตั้งแต่ 13.30 น. ถึง 9.00 น. ในช่วงบ่าย หวังว่าผู้อ่านบางคนจะได้รับประโยชน์จากมัน
ภาคผนวก 1 เรามาพูดถึงรหัสตำแหน่ง GB2312 รหัสภายในและรหัสหน้ากัน เพื่อนบางคนยังคงมีคำถามเกี่ยวกับประโยคนี้ในบทความ:
"ข้อความต้นฉบับของ GB2312 ยังคงเป็นรหัสพื้นที่ จากรหัสพื้นที่ถึงรหัสภายใน คุณต้องเพิ่ม A0 ให้กับไบต์สูงและไบต์ต่ำตามลำดับ"
ให้ฉันอธิบายโดยละเอียด:
"ข้อความต้นฉบับของ GB2312" หมายถึงมาตรฐานแห่งชาติในปี 1980 "ชุดพื้นฐานของชุดอักขระโค้ดภาษาจีนสำหรับการแลกเปลี่ยนข้อมูลมาตรฐานแห่งชาติของสาธารณรัฐประชาชนจีน GB2312-80" มาตรฐานนี้ใช้ตัวเลขสองตัวในการเข้ารหัสอักขระภาษาจีนและสัญลักษณ์ภาษาจีน ตัวเลขตัวแรกเรียกว่า "พื้นที่" และตัวเลขตัวที่สองเรียกว่า "บิต" ดังนั้นจึงเรียกว่ารหัสสถานที่ พื้นที่ 1-9 เป็นสัญลักษณ์จีน พื้นที่ 16-55 เป็นอักขระจีนระดับแรก และพื้นที่ 56-87 เป็นอักขระจีนระดับสอง ขณะนี้ Windows ยังมีวิธีป้อนข้อมูลตำแหน่งด้วย เช่น ป้อน 1601 เพื่อรับ "ah" (วิธีการป้อนตำแหน่งนี้สามารถจดจำรหัสตำแหน่งฐานสิบหก GB2312 และรหัสตำแหน่งทศนิยมได้โดยอัตโนมัติ ซึ่งหมายความว่าการป้อน B0A1 จะได้รับ "ah")
รหัสภายในหมายถึงการเข้ารหัสอักขระภายในระบบปฏิบัติการ รหัสภายในของระบบปฏิบัติการยุคแรกนั้นขึ้นอยู่กับภาษา Windows ในปัจจุบันรองรับ Unicode ภายในระบบ จากนั้นจึงใช้โค้ดเพจเพื่อปรับให้เข้ากับภาษาต่างๆ แนวคิดของ "โค้ดภายใน" ค่อนข้างคลุมเครือ โดยทั่วไป Microsoft อ้างถึงการเข้ารหัสที่ระบุโดยโค้ดเพจเริ่มต้นว่าเป็นรหัสภายใน
ไม่มีคำจำกัดความอย่างเป็นทางการของคำว่ารหัสภายใน และโค้ดเพจเป็นเพียงชื่อของบริษัท Microsoft ในฐานะโปรแกรมเมอร์ ตราบใดที่เรารู้ว่ามันคืออะไร ก็ไม่จำเป็นต้องตรวจสอบคำศัพท์เหล่านี้มากเกินไป
โค้ดเพจที่เรียกว่า (โค้ดเพจ) คือการเข้ารหัสอักขระสำหรับภาษา ตัวอย่างเช่น โค้ดเพจของ GBK คือ CP936 โค้ดเพจของ BIG5 คือ CP950 และโค้ดเพจของ GB2312 คือ CP20936
Windows มีแนวคิดเกี่ยวกับโค้ดเพจเริ่มต้น นั่นคือ การเข้ารหัสใดที่ใช้เป็นค่าเริ่มต้นในการตีความอักขระ ตัวอย่างเช่น Windows Notepad จะเปิดไฟล์ข้อความและเนื้อหาภายในเป็นสตรีมไบต์: BA, BA, D7, D6 Windows ควรตีความอย่างไร
ควรจะตีความตามการเข้ารหัส Unicode, GBK, BIG5 หรือ ISO8859-1 หรือไม่ หากตีความตาม GBK จะได้คำว่า "อักษรจีน" ตามการตีความการเข้ารหัสอื่นๆ อาจไม่พบอักขระที่เกี่ยวข้อง หรืออาจพบอักขระที่ไม่ถูกต้อง สิ่งที่เรียกว่า "ข้อผิดพลาด" หมายความว่าไม่สอดคล้องกับเจตนาดั้งเดิมของผู้เขียนข้อความ และมีการสร้างอักขระที่อ่านไม่ออก
คำตอบก็คือ Windows ตีความสตรีมไบต์ในไฟล์ข้อความตามโค้ดเพจเริ่มต้นปัจจุบัน คุณสามารถตั้งค่าโค้ดเพจเริ่มต้นได้โดยใช้ตัวเลือกภูมิภาคในแผงควบคุม มีรายการ ANSI ในบันทึกเป็นของ Notepad ซึ่งจะบันทึกตามวิธีการเข้ารหัสของโค้ดเพจเริ่มต้น
รหัสภายในของ Windows คือ Unicode ซึ่งในทางเทคนิคแล้วสามารถรองรับโค้ดเพจหลายหน้าพร้อมกันได้ ตราบใดที่ไฟล์สามารถอธิบายได้ว่ามันใช้การเข้ารหัสอะไร และผู้ใช้ได้ติดตั้งโค้ดเพจที่เกี่ยวข้องแล้ว Windows ก็สามารถแสดงมันได้อย่างถูกต้อง ตัวอย่างเช่น สามารถระบุชุดอักขระในไฟล์ HTML ได้
ผู้เขียนไฟล์ HTML บางคน โดยเฉพาะผู้เขียนภาษาอังกฤษ เชื่อว่าทุกคนในโลกใช้ภาษาอังกฤษและไม่ได้ระบุชุดอักขระในไฟล์ หากเขาใช้อักขระระหว่าง 0x80-0xff และ Windows ภาษาจีนตีความตาม GBK เริ่มต้น อักขระที่อ่านไม่ออกจะปรากฏขึ้น ในตอนนี้ เพียงเพิ่มคำสั่งที่ระบุชุดอักขระลงในไฟล์ html เช่น:
<meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1">
หากโค้ดเพจที่ผู้เขียนต้นฉบับใช้นั้นเข้ากันได้กับ ISO8859-1 จะไม่มีอักขระที่อ่านไม่ออก
เรามาพูดถึงรหัสสถานที่กันดีกว่า รหัสสถานที่ของ Ah คือ 1601 ซึ่งก็คือ 0x10, 0x01 ในรูปแบบเลขฐานสิบหก สิ่งนี้ขัดแย้งกับการเข้ารหัส ASCII ที่คอมพิวเตอร์ใช้กันอย่างแพร่หลาย เพื่อให้เข้ากันได้กับการเข้ารหัส ASCII 00-7f เราจึงเพิ่ม A0 ให้กับไบต์สูงและต่ำของรหัสพื้นที่ตามลำดับ ด้วยวิธีนี้ รหัสสำหรับ "ah" จะกลายเป็น B0A1 นอกจากนี้เรายังเรียกการเข้ารหัสโดยเพิ่ม A0 สองตัวเป็นการเข้ารหัส GB2312 แม้ว่าข้อความต้นฉบับของ GB2312 จะไม่ได้กล่าวถึงสิ่งนี้เลยก็ตาม