Bir röportaj sorusu olarak, genellikle siparişlerini tersine çevirmek için 8 bit öğelerin yerinde takas yapmanın teknik bitleri hakkında sorulur (gerçekte hangi karakterleri temsil edebileceğinden bağımsız olarak).
Aynı zamanda, özellikle nispeten üst düzey bir kişiyle görüşüyorsanız, en azından spesifikasyon ve girdinin kesin şekli hakkında bazı sorular duymayı umabilirsiniz. Onları sadece 8 bitlik öğeleri değiştirmenin basit bir örneğine yönlendirseniz bile, bundan daha geniş anlamda düşünüp düşünmediklerini bilmek değerli olabilir.
Geniş bir girdi yelpazesi ile uğraşmak zorunda kalırsanız, bir ağ yığını gibi bir "yığın" açısından düşünmek zorundasınız. Yazılımınızı, her biri belirli bir sırada oldukça belirli bir dönüşüm kümesi uygulayan bir dizi katman halinde oluşturmanız gerekir. Bu, dönüşümün her bir bölümünü kontrol altında tutabileceğiniz kadar basit tutmanıza ve gereksinimlerini karşılaması için makul bir şansa sahip olmanıza izin verir.
En azından biraz işe yarayabilir bulduğum bir olasılığı özetleyeceğim. Yine de daha iyi fikirleri olan başkalarının olabileceğini kabul eden ilk kişi benim. En azından benim için, bu biraz gerçek zarafetle kaba kuvvet mühendisliğine benziyor.
Normalde başka bir temsili UCS-4'e (diğer adıyla UTF-32) dönüştürerek başlamak istersiniz. Bunun için, genellikle kendi başına anlamaya çalışmak yerine kullanıcıdan gelen girdilere güvenmeyi tercih edersiniz . Bazı durumlarda, emin gelmez sekizli belirli bir dizisi olabilir değil , belirli bir kodlama şemasının kurallara uyar, ancak nadiren (hiç değilse) belirli bir kodlama şemasını takip eder emin olabilirsiniz.
Bir sonraki adım isteğe bağlıdır. Girişi dört Unicode normalleştirme formundan birine normalleştirebilirsiniz. Bu durumda, muhtemelen "NFKC" dönüşümünü uygulamak istersiniz: uyumluluk ayrışımı ve ardından standart kompozisyon. Bu, (mümkünse) aksan biçimlerini birleştirerek (Jon'un bahsettiği U + 301 gibi) tek kod noktalarına (örneğin, "U + 301" olan bir "A" "akut ile Latin sermayesi A" ya dönüştürülür) , U + 00C1).
Daha sonra, dizeyi gerçek karakterlere ayırarak baştan sona tüm karakterleri dolaşırsınız ve aksan işaretlerini (hala) birleştirerek varsa, değiştirdikleri karakterlerle birlikte tutarsınız. Bunun sonucu genellikle dizgideki her birinin konumu ve uzunluğu gibi gerçek karakterlerin bir dizini olacaktır.
Bu karakterlerin sırasını, genellikle önceki adımda oluşturduğunuz dizini kullanarak tersine çevirirsiniz.
Daha sonra (isteğe bağlı olarak) NFD (kanonik ayrışma) gibi başka bir Unicode normalleştirme işlemi uygularsınız. Bu, yukarıda bahsedilen "akut ile Latin A" yı iki kod noktasına dönüştürecektir - "Latin başkenti A" ve "Akut'u birleştiren". Girişinizi ancak başlangıç için bir U + 00C1 içerdiği olduysa, o da dönüştürmek istiyorum bu iki kod noktaları içine de.
Daha sonra UCS-4 kod noktaları dizisini istenen kodlamaya (UTF-8, UTF-16, vb.)
Unicode normalleştirme adımlarının, dizeyi saklamak için gereken kod noktalarının sayısını değiştirebileceğini / değiştireceğini unutmayın; böylece bunları eklerseniz, artık orijinal depolama alanına sığacak sonuç dizesini planlayamazsınız. Açıkça, sonuçta ortaya çıkan kod noktaları doğrudan giriş kodu noktalarına karşılık gelmeyebilir.