2013-08-20 20 views
7

Bir C programında, Unicode kod noktası sırasına geçerli UTF-8 kodlu dizeleri listesini sıralamak istiyorum. Harmanlama yok, yerel duyarlılık yok.strcmp, utf-8 dizeleri kod noktası sırasına göre karşılaştırır mı?

Karşılaştırma işlevine ihtiyacım var. Unicode karakterler üzerinde yinelenen böyle bir işlevi yazmak için yeterince kolaydır. (Ben GLib kullanacağınız başına, bu yüzden g_utf8_next_char ile yineleme ve g_utf8_next_char dönüş değerleri karşılaştırmak istiyorum.)

Ama merak dışarı ve muhtemelen basitlik ve verimlilik olduğunu, merak ediyorum: basit bir bayt -for-bayt strcmp (veya g_strcmp) aslında aynı işi yapıyor musunuz? Bunun, UTF-8 encodes ilk olarak en önemli bitler ve N + 1 baytlarda kodlama gerektiren bir kod noktasının, N bayt olarak kodlanması gereken bir kod noktasından daha büyük bir başlangıç ​​baytına sahip olması gerektiğini düşünüyorum.

Ama belki bir şeyleri özlüyorum. Şimdiden teşekkürler.

cevap

7

Evet, UTF-8 kod noktası sırasını korur, böylece strcmp'u kullanabilirsiniz. Bu, UTF-8'in (çok) güzel noktalarından biridir.

bir uyarı Unicode codepoints UTF-32 değerlerdir ve "kod noktası" amacıyla Unicode dizeleri harmanlama hakkında konuşmak bazı insanlar aslında "kod noktası" yanlış UTF-16 kod birimi" demek kelimesini kullanarak olmasıdır ". Siparişin UTF-16 kod birimi harmanlamasıyla eşleşmesini istiyorsanız, biraz daha fazla çalışma söz konusudur.

+0

Çok teşekkürler! Kullanım durumumun takibini yapmak üzereydim ve uyarının nasıl uygulandığını düşünmüyordum ve sonra bu bilginin [standart] 'da olduğunu gördüm (http://www.w3.org/TR/xml- c14n # DocumentOrder) Uygulamayı deniyorum: "Dizeleri en az alfabetik olarak en iyi şekilde sipariş eden sözcüksel karşılaştırma, UTF-8 tabanlı sözcükbilgisel sıralamaya eşdeğer olan UCS kod noktası değerlerini temel alır." '' :-) – skagedal

İlgili konular