[Soci SLIP] unicode
Lucio Crusca
lucio a sulweb.org
Mar 10 Lug 2012 11:53:43 CEST
In data lunedì 9 luglio 2012 20:14:26, llcfree ha scritto:
> > perché strlen ritorna il numero di caratteri (intesi erroneamente come
> > bytes) di cui è composta la stringa.
>
> Be', perche' il numero di bytes *E'* 2. A me semvra giusto che strlen
> conti i bytes :)
Sì, dal p.d.vista della libreria C è giusto, in C potremmo dire che il
concetto di "carattere" non esiste, in realtà esiste solo il concetto di byte.
Il problema però esiste quando il programmatore inizia ad aver bisogno di
contare davvero i caratteri, non i bytes:
int i;
char *stringa = "àèìòù";
for (i = 0; i < strlen(stringa) ; i++)
{
// qui devo fare qualcosa su ogni "carattere"
// (non byte) della stringa,
// ma stringa[i] non sarà mai il carattere corretto.
}
> Perche' solo i programmatori C? E tutti gli altri? Mica loro il problema
> non ce l'hanno.
Sì beh in realtà dipende dal linguaggio che usano. Esempio in Java ci pensa il
framework a fare le dovute traduzioni, senza bisogno di usare librerie
apposite (ovvero la libreria standard inclusa gestisce già internamente queste
problematiche).
"è".length() == 1
mentre invece sorprendentemente in Python
len("è") == 2
ed in PHP
strlen("è") == 2
dico sorprendentemente perché Python e PHP, essendo interpretati, sono
linguaggi di alto livello che mi aspettavo fornissero un'astrazione dei
caratteri ed una separazione netta fra quello che è un byte e quello che è un
carattere, ma non è un segreto che a me Python e PHP non piacciono
particolarmente. Infatti in bash:
export STRINGA="è"
echo ${#STRINGA}
1
come mi aspettavo.
>
> Comunque, io invece non credo proprio che l'abbiano risolto. E' il
> codice che va riscritto, una libreria non basta (per il vecchio).
Intendevo dire che secondo me l'hanno già riscritto/corretto, a meno che non
parliamo di software non libero o che usano in poche persone (in percentuale).
> Per fare un esempio, riscrivere TeX in modo che sia unicode compliant e'
> un vero casino.
> Se lo e' per TeX, che almeno sanno di cosa si tratta, ed
> e' nato per avere un testo stampabile NELLO STESSO MODO
> indipendentemente da tutto quel che c'e' in mezzo tra l'autore e il
> lbro, figurati per gli altri.
Appunto, percentualmente parlando, TeX lo usano in pochi e quelli che lo usano
probabilmente sanno come arrangiarsi ed aggirare il problema. Inotre TeX è un
caso molto particolare, dove il raggiungimento dell'obiettivo che hai citato
passa per una strada molto in salita già di suo, senza contare Unicode.
> > Non capisco in che senso questo sarebbe un problema. Mi risulta che
> > esistano già i fonts con i glifi necessari un po' per tutte le lingue
> > del mondo, mi sbaglio?
>
> Sbagli. Non esiste neppure un arial standard :)
Ok, ma che c'entra con Unicode? Un discorso è poter rappresentare i caratteri
(Unicode è la soluzione), un discorso completamente diverso è voler
rappresentare la A maiuscola graficamente allo stesso modo su sistemi diversi
(un font standard, se esistesse, sarebbe la soluzione, ma per ora la soluzione
è portarsi dietro il font usato in origine assieme al testo da impaginare e a
me pare che funzioni).
Maggiori informazioni sulla lista
Soci