In Python 3, le stringhe Unicode dovrebbero gentilmente fornire il numero di caratteri Unicode, ma non riesco a capire come ottenere la larghezza di visualizzazione finale di una stringa dato che alcuni caratteri si combinano.Come si ottiene la larghezza di visualizzazione dei caratteri Unicode combinati in Python 3?
Genesi 1: 1 - בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ
>>> len('בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ')
60
Ma la stringa è largo solo 37 caratteri. La normalizzazione non risolve il problema perché le vocali (i punti al di sotto dei caratteri più grandi) sono caratteri distinti.
>>> len(unicodedata.normalize('NFC', 'בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ'))
60
Come nota a margine: il modulo textwrap
è completamente rotto a questo proposito, in modo aggressivo il confezionamento dove non dovrebbe. str.format
sembra altrettanto rotto.
- domanda simile che è stato contrassegnato come duplicato: Display width of unicode strings in Python
- La domanda è stato contrassegnato come duplicato di solo affronta normalizzazione: Normalizing Unicode
Counting cluster grafema potrebbe non essere sufficiente ad esempio, [diversi tipi di carattere può portare a diverse dimensioni di testo] (http://stackoverflow.com/q/2922295/4279) – jfs
Anche se stiamo garantito un font a spaziatura fissa ? –
Segui il link, prova il codice e guarda tu stesso. – jfs