W języku Python 3 ciągi Unicode powinny podać liczbę znaków Unicode, ale nie wiem, jak uzyskać końcową szerokość tekstu, biorąc pod uwagę, że niektóre znaki się łączą.Jak uzyskać szerokość wyświetlania połączonych znaków Unicode w Pythonie 3?
Genesis 1: 1 - בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ
>>> len('בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ')
60
Ale ciąg jest szerokość tylko 37 znaków. Normalizacja nie rozwiązuje problemu, ponieważ samogłoski (kropki pod większymi znakami) są odrębnymi znakami.
>>> len(unicodedata.normalize('NFC', 'בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ'))
60
Na marginesie: moduł textwrap
jest całkowicie złamany w tym względzie agresywnie zawijania, gdzie nie powinny. str.format
wydaje się podobnie zepsuty.
- Podobne pytanie, który został oznaczony jako duplikat: Display width of unicode strings in Python
- Pytanie to zostało oznaczone jako duplikat tylko adresy normalizacja: Normalizing Unicode
liczące klastry grafem może nie wystarczyć np [różne czcionki mogą prowadzić do różnych rozmiarów tekst] (http://stackoverflow.com/q/2922295/4279) – jfs
Nawet jeśli mamy zagwarantowane czcionkę o stałej szerokości ? –
Skorzystaj z linku, wypróbuj kod i przekonaj się sam. – jfs