2012-12-19 17 views
8

spojrzenie na następującym fragmencie:Python unicode normalizacja: czy jest to poprawna przetłumaczyć u ' XB4' U” u0301'

>>> 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') 

Staram się zrozumieć, jeśli zachowanie tłumaczyć u'\xb4' do u' \u0301' jest poprawny. Dlaczego łączy ostry akcent z przestrzenią? Dlaczego w ogóle to tłumaczy?

Na fileformat widzimy, że ACUTE ACCENT był nazywany SPACING ACUTE. Pomyślałem, że to znaczy, że kursor powinien się przesunąć zamiast czekać na wpisanie następującego znaku.

UPD: na wypadek, gdyby ktoś był zainteresowany, tutaj jest lista znaków unicode, które po normalizacji NFKC mają spację początek: http://pastebin.com/Z99r5AK9

Odpowiedz

11

charakter akcent jest połączenie przestrzeni i łączenia znaków akcent, jak określono w standardzie Unicode:

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

\u00B4 postać ma nieco dwuznaczne historię, ale standard Unicode postanowił potraktować to jako białą przestrzeń + akcent, mimo że ma on często był używany jako znak diakrytyczny, patrz this discussion.

Możesz ewentualnie użyć opcji \u02CA; nie jest traktowane jako biała przestrzeń i nie ma określonego rozkładu. Zamiast tego jest kwalifikowany jako list, więc twój przebieg może się różnić.

+0

bardzo interesujące, dziękuję! – newtover

+0

U + 00B4 ACUTE ACCENT i U 02CA MODIFIER LETTER ACUTE ACCENT są różnymi znakami i nie należy oczekiwać, że będą "renderowane tak samo". Ta pierwsza jest znacznie częściej obecna w czcionkach. Gdy oba są obecne, zwykle wyglądają podobnie lub podobnie, ale mają różne właściwości zdefiniowane w standardzie Unicode (np. Ogólna kategoria Symbol, modyfikator względem litery, modyfikator). I na przykład w czcionce Doulos SIL ich glify są podobno identyczne, ale szerokości z przodu są różne; w MingLiU stoki są bardzo różne. –

+0

@ JukkaK.Korpela: Poprawiam się; Musiałem źle zrozumieć kontekst, usunę tę część. –

4

Proszę spojrzeć na dokument Unicode Collation Algorithm. W szczególności należy zwrócić uwagę, że

zgodności normalizacji (NFKC) składa samodzielny akcent na połączenie przestrzeni + łączący nacisk.

+0

Powinienem szukać lepiej, dziękuję! – newtover

3

W NFKD, akcentowane są zapisane w „split” sposób: najpierw znakowych akcentowane a następnie łączenie akcent: u' \u0301'

W NFKC, akcentowane są zapisane w „kombinowanego” sposób : istnieje dedykowany kodowany kod Unicode: u'\xb4', który jest skrótem dla u'\u00b4'.

Obie reprezentują sam akcent, który może być postrzegany jako akcent nad spacji.

+0

dziękuję, wszystkie odpowiedzi są bardzo przydatne – newtover

+1

jest również interesujące dlaczego 'normalize ('NFKC', u '\ u0301')' nie zwraca 'u '\ xb4'' chociaż. – newtover

Powiązane problemy