Sto scrivendo un'applicazione terminale (console) che dovrebbe includere testo unicode arbitrario.determina se un carattere Unicode è a larghezza intera o a metà larghezza in C++
I terminali utilizzano in genere un carattere monospaziato (larghezza fissa), in modo da racchiudere un testo, è appena più che contare i caratteri e osservare se una parola rientra in una riga o meno e agire di conseguenza.
Il problema è che nella tabella Unicode sono presenti caratteri a larghezza intera che occupano la larghezza di 2 caratteri in un terminale.
Il conteggio di questi vedrebbe 1 carattere unicode, ma il carattere stampato è largo 2 caratteri "normali" (metà larghezza), interrompendo la routine di avvolgimento in quanto non è a conoscenza di caratteri che occupano il doppio della larghezza.
Come esempio, questo è un personaggio fullwidth (U + 3004, il simbolo JIS)
〄 12
Esso non occupa l'intera larghezza di 2 caratteri qui anche se è preformattati, ma fa uso di due volte la larghezza di un carattere occidentale in un terminale.
Per far fronte a questo, devo distinguere tra caratteri a larghezza intera o metà larghezza, ma non riesco a trovare un modo per farlo in C++. È davvero necessario conoscere tutti i caratteri a larghezza intera nella tabella Unicode per aggirare il problema?
Rilevante http://www.icu-project.org/apiref/icu4c/uchar_8h.html#a3376f0d34bb23c54671859f1978b4226 e http://www.unicode.org/reports/tr11/ –
Per quale sistema operativo/piattaforma? –
Mi dispiace, mi sono perso. Il sistema operativo è Linux. – Noice