ในฐานะที่เป็นคำถามสัมภาษณ์มักถามเกี่ยวกับบิตทางเทคนิคของการทำสลับแบบในรายการ 8 บิตเพื่อสลับลำดับ (โดยไม่คำนึงถึงตัวละครที่พวกเขาอาจเป็นตัวแทนจริง ๆ )
ในเวลาเดียวกันโดยเฉพาะอย่างยิ่งถ้าคุณสัมภาษณ์คนที่ค่อนข้างอาวุโสคุณอย่างน้อยก็หวังว่าจะได้ยินคำถามเกี่ยวกับสเปคและรูปแบบที่แน่นอนของอินพุต แม้ว่าคุณจะนำพวกเขากลับไปที่กรณีง่าย ๆ เพียงแค่แลกเปลี่ยนไอเท็ม 8 บิตโดยรู้ว่าพวกเขาคิดในแง่ที่กว้างกว่านั้นอาจมีประโยชน์หรือไม่
หากคุณต้องจัดการกับอินพุตที่หลากหลายคุณต้องคิดในแง่ของ "สแต็ก" ซึ่งเป็นเหมือนสแต็กเครือข่าย คุณต้องสร้างซอฟต์แวร์ของคุณในหลายเลเยอร์ซึ่งแต่ละชุดจะใช้การแปลงที่ค่อนข้างเฉพาะเจาะจงตามลำดับเฉพาะ สิ่งนี้ช่วยให้คุณทำให้การเปลี่ยนแปลงแต่ละส่วนนั้นง่ายพอที่คุณจะสามารถควบคุมมันได้และมีโอกาสพอสมควรที่จะทำให้มันเป็นไปตามข้อกำหนดของมัน
ฉันจะร่างหนึ่งความเป็นไปได้ที่ฉันพบว่าอย่างน้อยค่อนข้างใช้การได้ ฉันเป็นคนแรกที่ยอมรับว่าอาจมีคนอื่นที่มีแนวคิดที่ดีกว่า อย่างน้อยสำหรับฉันนี่ดูเหมือนจะเป็นงานวิศวกรรมที่โหดเหี้ยม แต่มีความสง่างามที่แท้จริงเพียงเล็กน้อย
ตามปกติคุณต้องการเริ่มต้นด้วยการแปลงการนำเสนออื่นเป็น UCS-4 (aka UTF-32) สำหรับสิ่งนี้คุณมักต้องการพึ่งพาข้อมูลจากผู้ใช้มากกว่าที่จะพยายามคิดออกเอง ในบางกรณีคุณสามารถมั่นใจได้ว่าลำดับของอ็อตเท็ตบางตัวไม่เป็นไปตามกฎของรูปแบบการเข้ารหัสเฉพาะ แต่คุณแทบจะไม่สามารถ (ถ้าเคย) แน่ใจได้ว่ามันเป็นไปตามรูปแบบการเข้ารหัสเฉพาะ
ขั้นตอนต่อไปเป็นทางเลือก คุณสามารถทำให้ปกติอินพุตเป็นหนึ่งในสี่แบบฟอร์มการทำให้เป็นมาตรฐาน Unicode ในกรณีนี้คุณอาจต้องการใช้การแปลง "NFKC": การสลายตัวของความเข้ากันได้ตามด้วยองค์ประกอบที่เป็นที่ยอมรับ สิ่งนี้ (หากเป็นไปได้) แปลงการรวมรูปแบบการออกเสียง (เช่น U + 301 ที่จอนพูดถึง) เป็นรหัสจุดเดียว (เช่น "A" กับ "U + 301" จะถูกแปลงเป็น "ละตินทุน A กับเฉียบพลัน" , U + 00C1)
จากนั้นคุณเดินผ่านตัวละครทุกตัวตั้งแต่ต้นจนจบแบ่งสตริงเป็นตัวอักษรจริง - และถ้ามี (ยัง) รวมเครื่องหมายกำกับเสียงให้พวกเขาด้วยตัวละครที่พวกเขาปรับเปลี่ยน ผลลัพธ์ของสิ่งนี้มักจะเป็นดัชนีของตัวละครจริงในสตริงเช่นตำแหน่งและความยาวของแต่ละตัว
คุณย้อนกลับลำดับของอักขระที่สมบูรณ์เหล่านั้นโดยทั่วไปแล้วโดยใช้ดัชนีที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า
จากนั้นคุณ (อีกทางเลือก) ใช้กระบวนการ Unicode Normalization อื่นเช่น NFD (การสลายตัวตามมาตรฐาน) สิ่งนี้จะเปลี่ยน "Latin A ด้วยเฉียบพลัน" ดังกล่าวกลับเป็นสองจุดรหัส - "ละตินทุน A" และ "การรวม Acute" หากอินพุตของคุณมี U + 00C1 เริ่มต้นอย่างไรก็ตามมันจะแปลงค่านั้นให้เป็นจุดโค้ดสองจุดเช่นกัน
จากนั้นคุณเข้ารหัสลำดับของจุดโค้ด UCS-4 เป็นการเข้ารหัสที่ต้องการ (UTF-8, UTF-16, ฯลฯ )
โปรดทราบว่าขั้นตอนการนอร์มัลไลซ์เซชั่น Unicode สามารถ / จะเปลี่ยนจำนวนจุดรหัสที่จำเป็นในการจัดเก็บสตริงดังนั้นถ้าคุณรวมเหล่านั้นคุณไม่สามารถวางแผนเกี่ยวกับผลสตริงที่เหมาะสมในการจัดเก็บเดิม เห็นได้ชัดว่าเพียงพอจุดรหัสผลลัพธ์อาจไม่ตรงกับจุดรหัสอินพุตโดยตรง