2012-12-19 10 views
8

bakmak için:Python unicode normalleşme: Doğru u tercüme etmektir ' xb4' u' u0301' Aşağıdaki kod parçasında en

>>> import unicodedata 
>>> from unicodedata import normalize, name 

>>> normalize('NFKD', u'\xb4') 
u' \u0301' 

>>> normalize('NFKD', u'a\xb4a') 
u'a \u0301a' 

>>> normalize('NFKC', u'a\xb4a') 
u'a \u0301a' 

>>> name(u'\xb4'), name(u'\u0301') 
('ACUTE ACCENT', 'COMBINING ACUTE ACCENT') 

Ben davranıştır u' \u0301' için u'\xb4' çevirmek için eğer anlamaya çalışıyorum doğru. Neden akut aksanı bir boşlukla birleştiriyor? Neden u \xb4'u çevirir? fileformat numaralı telefondan ACUTE ACCENT'un SPACING ACUTE olarak adlandırıldığını görüyoruz. Bunu sadece imleci yazılmasını yerine şu karakter için bekleyen hareket etmeliyiz anlamına geliyordu, düşünce

UPD:. Vaka birisi ilgileniyor burada, bir liste ise Unicode karakterleri o NFKC normalleştirme bir boşluk var sonra başlangıç: http://pastebin.com/Z99r5AK9

cevap

11

bir vurgu karakteri Unicode standardına belirtildiği gibi bir boşluk kombinasyonu ve bir birleşme vurgu karakter: \u00B4 karakter biraz belirsiz bir geçmişi vardır

>>> import unicodedata 
>>> unicodedata.decomposition(u'\xb4') 
'<compat> 0020 0301' 

ama Unicode'un bunu whitespace olarak ele almaya karar verdi + aksan, olmasına rağmen sadece bir diasetik işareti olarak kullanılmış, bkz. this discussion.

\u02CA'u alternatif olarak kullanabilirsiniz; Bu, boşluk olarak kabul edilmez ve belirtilen bir ayrıştırma yoktur. Bunun yerine bir harf olarak nitelendirilir, bu yüzden kilometreniz değişebilir.

+0

Çok ilginç, teşekkürler! – newtover

+0

U + 00B4 ACENTE ACCENT ve U + 02CA MODIFIER LETTER ACUTE ACCENT, farklı karakterlerdir ve “aynı şekilde üretilmeleri” beklenmemelidir. İlki yazı tiplerinde çok daha sık görülür. Her ikisi de mevcut olduğunda, genellikle benzer veya aynı görünürler, ancak Unicode Standardında tanımlanan farklı özelliklere sahiptirler (örneğin, genel kategori Sembol, Değiştirici ile Mektup, Değiştirici). Ve örneğin, Doulos SIL yazı tipinde, glifleri görünüşte benzerdir, ancak ilerleme genişlikleri farklıdır; ve MingLiU'da, yamaçlar çok farklıdır. –

+0

@ JukkaK.Korpela: Ben düzeltilmeyi bekliyorum; Bağlamı yanlış anlamış olmalıyım, o kısmı kaldıracağım. –

4

Unicode Collation Algorithm belgesine bir bakın. Özel olarak, bu

uyumluluk normalleştirme dikkat (NFKC) tek başına katlanabilir birleştirme vurgu + alan bir kombinasyonuna vurgular. İlk karakter vurgulu edilmesi ve daha sonra bir araya vurgu:

NFKD olarak
+0

Daha iyi aramalıydım, teşekkürler! – newtover

3

, vurgulu karakterler, bir "bölünmüş" bir şekilde saklanır NFKC olarak u' \u0301'

, vurgulu karakterler bir "birleşik" bir şekilde saklanır : Özel bir Unicode kod noktası var: u'\xb4', u'\u00b4' için shorthand. Her ikisi de, bir boşluk karakteri üzerinde bir aksan olarak görülebilen, tek başına olan aksanı temsil etmektedir.

+0

Teşekkürler, tüm cevaplar çok yararlı – newtover

+1

da ilginçtir, 'normalize (' NFKC ', u' \ u0301 ') '' u' \ xb4'' döndürmez. – newtover

İlgili konular