2013-12-18 25 views
7

Unicode karakterinin tam genişlikte olup olmadığını nasıl kontrol edebilirim? Win32/Örneğin C++ unicode karakterinin tam genişlikte olup olmadığını kontrol edin

MFC

kullanımı

, F tam genişlik değil, tam genişliği, A tam genişlik değil, tam genişliktir. "tam genişliği" ile neyi

demek
+0

Sorunun anlamsız olduğunu anlıyorsunuz. Dize, kodlama hakkında hiçbir şey bilmiyorsanız, hiçbir şey ifade etmez. Lütfen konuya biraz ışık tutması gereken bu güzel sanat eserini inceleyiniz -> http://www.joelonsoftware.com/articles/Unicode.html – Pandrei

+1

+1 Sorunuz, bugün bir şeyler öğrenmek istedi! – Roddy

+0

@Pandrei Bu makaleyi tavsiye ederim. Bir ya da iki yararlı nokta oluştururken, birkaç hata da vardır: yeni başlayanlar için yazar _UCS_ ve _UTF_ arasındaki farkı anlamıyor gibi görünmüyor. –

cevap

-2

? Bir karakterin genişliği bunu bir tek bayt karakter olup olmadığını anlama Eğer.

görüntülenmekte olduğu yazı tipine bağlıdır, bu hala net değil. Hangi kodlamada tek bir bayt karakter? UTF-8'de, kod noktasının 128'den küçük olması durumunda tek bir bayt karakteri olacaktır; Eğer UTF-16 kullanıyorsanız (Windows altında olduğuna göre muhtemel, ), sadece 128. ISO 8859-1 (başka geniş yayılmış kodlama) 'de tek bayt kodlama ile karakter karşılaştırmak: 256 İçin karşılaştırmak 256 daha azı, UTF-16 ünitesi (bazen Latince-1 olarak da bilinir) ISO 8859-1 kod noktasına sayısal özdeş olacaktır. ASCII kodlayan tekli bayt için (hemen hemen hiç kullanılmamış, ama ortak kodlamaların çoğu ortak kodlamaların çoğu 128 kodunun daha iyi olduğu ilk kod için puanla aynıdır).

+1

http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms – Roddy

+0

@Roddy Daha mantıklı. Unicode kodlamamdaki ikinci tam genişlikli karakterini aramalıydım. (Tabii ki, temel olarak basit bir cevap olmadığı anlamına gelir.) –

8

İhtiyacınız olan şey, East Asian Width karakterini almaktır. Unicode Karakter Veritabanından EastAsianWidth.txt dosyasını ayrıştırarak yapabilirsiniz. Bu bilgiyi döndüren bir Win32 API'sini bulamadım, ancak Python'da örneğin unicodedata.east_asian_width(unichr)'u kullanabilirsiniz.

Sorunun arka planı ve daha fazla bilgi için Annex #11 konusuna bakın.

+0

Doğru cevap budur. FWIW: Unicode konsorsiyumunun çeşitli dosyaları kolayca ayrıştırmak için tasarlanmıştır, bu yüzden makineden bir C++ tablosu oluşturması çok zor olmamalıdır. (Bunu başka bir dizi dosya için yaptım.) –

+0

Doğu Asya dışındaki dillerin tam genişlikte karakterleri var mı? – linquize

+0

Daha ayrıntılı bir tartışma için şu cevaba bakın: http://stackoverflow.com/a/9145712/53974 – Blaisorblade