Sebagai pertanyaan wawancara, biasanya ditanyakan tentang bit teknis melakukan in-place swap item 8-bit untuk membalikkan pesanan mereka (terlepas dari karakter apa yang sebenarnya mereka wakili).
Pada saat yang sama, terutama jika Anda mewawancarai orang yang relatif senior, Anda setidaknya bisa berharap untuk mendengar beberapa pertanyaan tentang spesifikasi dan bentuk input yang tepat. Bahkan jika Anda mengarahkan mereka kembali ke kasus sederhana dengan hanya bertukar item 8-bit, mengetahui apakah mereka berpikir secara lebih luas atau lebih dari itu mungkin berharga.
Jika Anda harus berurusan dengan berbagai input, Anda hanya perlu berpikir tentang "tumpukan", sedikit seperti tumpukan jaringan. Anda harus membangun perangkat lunak Anda dalam sejumlah lapisan, yang masing-masingnya menerapkan serangkaian transformasi yang cukup spesifik dalam urutan tertentu. Ini memungkinkan Anda menjaga setiap bagian dari transformasi cukup sederhana sehingga Anda dapat mengendalikannya, dan memiliki peluang yang masuk akal untuk membuatnya memenuhi persyaratannya.
Saya akan menguraikan satu kemungkinan yang saya temukan paling tidak bisa diterapkan. Saya yang pertama mengakui bahwa mungkin ada orang lain yang memiliki ide yang lebih baik. Setidaknya bagi saya, ini agak mirip rekayasa kasar, dengan sedikit keanggunan nyata.
Anda biasanya ingin memulai dengan mengonversi representasi lain ke UCS-4 (alias UTF-32). Untuk ini, Anda biasanya lebih suka mengandalkan input dari pengguna daripada mencoba untuk mengetahuinya sendiri. Dalam beberapa kasus, Anda dapat yakin bahwa urutan oktet tertentu tidak mengikuti aturan skema penyandian tertentu, tetapi Anda jarang (jika pernah) yakin bahwa ia mengikuti skema penyandian tertentu.
Langkah selanjutnya adalah opsional. Anda dapat menormalkan input ke salah satu dari empat bentuk normalisasi Unicode. Dalam hal ini, Anda mungkin ingin menerapkan transformasi "NFKC": dekomposisi kompatibilitas diikuti oleh komposisi kanonik. Ini akan (jika mungkin) mengubah menggabungkan bentuk diakritik (seperti U + 301 yang disebutkan Jon) menjadi titik kode tunggal (misalnya, "A" dengan "U + 301" akan dikonversi menjadi "Modal Latin A dengan akut" , U + 00C1).
Anda kemudian berjalan melalui semua karakter dari awal hingga akhir, memecah string menjadi karakter yang sebenarnya - dan jika ada (masih) menggabungkan tanda diakritik, menjaganya dengan karakter yang mereka modifikasi. Hasil dari ini biasanya akan menjadi indeks karakter aktual dalam string, seperti posisi dan panjang masing-masing.
Anda membalik urutan karakter lengkap itu, biasanya dengan menggunakan indeks yang Anda buat pada langkah sebelumnya.
Anda kemudian (lagi, secara opsional) menerapkan proses normalisasi Unicode lain, seperti NFD (dekomposisi kanonik). Ini akan mengubah "Latin A dengan akut" kembali menjadi dua poin kode - "modal Latin A" dan "menggabungkan Akut". Jika masukan Anda kebetulan mengandung U + 00C1 untuk memulai dengan, namun juga akan mengkonversi bahwa menjadi dua poin kode juga.
Anda kemudian mengkodekan urutan poin kode UCS-4 ke dalam pengkodean yang diinginkan (UTF-8, UTF-16, dll.)
Perhatikan bahwa langkah normalisasi Unicode dapat / akan mengubah jumlah titik kode yang diperlukan untuk menyimpan string, jadi jika Anda memasukkannya, Anda tidak dapat lagi merencanakan string hasil yang dimasukkan ke penyimpanan asli. Cukup jelas, poin kode yang dihasilkan mungkin tidak berhubungan langsung dengan poin kode input juga.