Pagine di manuale localizzate e unicode UTF8

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Accenno solo all'antefatto: volevo scrivermi qualche appunto accessibile da terminale. Un banale file di testo semplice andava benissimo. Poi ho pensato, perché non formattare il tutto come se fosse una pagina di manuale? E qua cominciano i problemi: infatti ho il terminale bash localizzato in it_IT.UTF8. E anche vim crea file codificati in UTF8. Mi sono così presto resto conto che lanciando:

Codice: Seleziona tutto

man ./appunti
Si ottiene un testo formattato in modo molto leggibile, come una pagina di manuale, ma ad esempio le lettere accentate sono rappresentate da strani caratteri sballati tipo "A maiuscole" con sopra qualche simbolino stano. Insomma non ci siamo.
Sono riuscito a visualizzare in modo quasi corretto il mio testo col comando groff:

Codice: Seleziona tutto

groff -k -m mandoc -Tutf8 ./appunti
In questo modo funzionano le lettere accentate, ma non funziona l'adattamento alla larghezza della finestra.
L'opzione -k di groff in pratica gli ordina di scegliere la codifica del testo in input da formattare, secondo un riconoscimento automatico che a quanto pare funziona e si basa sul tool "preconvert": in questo modo groff capisce che il testo in ingresso è in utf8 e lo tratta in modo corretto rendendolo poi in output con codifica utf8. Siccome poi anche il terminale è localizzato in utf8, alla fine le accentate si leggono correttamente.

Ravanando tra le pagine di manuale in italiano, ho "scoperto" che ve ne sono alcune codificate in ASCII, altre in ISO-8859, altre ancora in UTF8.
Esempi:
- la pagina del comando man(1) è in ISO-8859 (v.di /usr/man/it/man1.gz)

Codice: Seleziona tutto

file man.1
man.1: troff or preprocessor input, ISO-8859 text, with CRLF, LF line terminators
Notare che viene visualizzata correttamente (nonostante il terminale da cui la guardo è localizzato in utf8)

- la pagina del comando groupadd(8) è in ASCII (v.di sempre /usr/man/it/*)

Codice: Seleziona tutto

$ file groupadd.8
groupadd.8: troff or preprocessor input, ASCII text
Notare anche in questo caso che le accentate si vedono bene.

- la pagina di slackpkg(8) è in UTF8

Codice: Seleziona tutto

$ file slackpkg.8
slackpkg.8: troff or preprocessor input, UTF-8 Unicode text
Provate un po' a lanciare man slackpkg: a me non visualizza correttamente le accentate. Riporto un pezzetto:

Codice: Seleziona tutto

DESCRIZIONE
       Slackpkg  è  uno  strumento  per  tutti quelli che vogliono installare e aggiornare facilmente i pacchetti via rete. Con slackpkg, puoi
       avere un'installazione minimale di Slackware Linux e installare/aggiornare solo quei pacchetti di cui hai bisogno.

       Non è necessario configurare NFS o creare decine di CD per i tuoi computer; quello che serve è scrivere un comando e tutti gli  ultimi
       pacchetti di Slackware saranno nelle tue dita.
In sintesi, al di là del mio velleitario testo di appunti da visualizzare con "man", capita che in generale man non riesce a rendere come dovrebbe le pagine di manuale codificate in partenza in UTF8.
È un problema risaputo? In rete ho trovato qualcosa ma sembra che in quei casi il problema fosse la codifica del terminale che non era impostata ad utf8.
Nel mio caso ho la seguente localizzazione da shell:

Codice: Seleziona tutto

$ locale
LANG=it_IT.UTF-8
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE=C
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_PAPER="it_IT.UTF-8"
LC_NAME="it_IT.UTF-8"
LC_ADDRESS="it_IT.UTF-8"
LC_TELEPHONE="it_IT.UTF-8"
LC_MEASUREMENT="it_IT.UTF-8"
LC_IDENTIFICATION="it_IT.UTF-8"
LC_ALL=
Domande:
- potreste fare un test lanciando il man di slackpkg e riportare se le accentate vengono visualizzate in modo corretto?
- potreste riportare anche il vostro output del comando "locale"?
- avete qualche idea di come si potrebbe risolvere questo inghippo?

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2722
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.5.3-ck1
Desktop: lxde
Località: Pisa
Contatta:

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da ponce »

io visualizzo le accentate correttamente.

sospetto che il tuo problema sia legato all'emulatore di terminale che hai deciso di utilizzare: quello che ti posso confermare e' che usando i tuoi stessi settaggi per la variabile LANG, con xterm e lxterminal (quello che uso) le accentate funzionano tranquillamente.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Usando "xterm", se lancio "man slackpkg" ho comunque i caratteri strani. Sto testando la cosa su slackware 14.2.

EDIT
Ferma un attimo, sempre dallo stesso xterm, ho tentato rapidamente da un chroot della Current, in effetti lì "man slackpkg" funziona con tanto di accenti corretti...
Ora non capisco se sia un problema di qualcosa configurato male nella mia 14.2 o di qualcosa che è stato aggiornato nella Current e che risolve il problema.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Mi sa che la faccenda abbia a che vedere con l'introduzione di man-db al posto di man:

Codice: Seleziona tutto

$ ls /var/log/packages/man*
/var/log/packages/man-1.6g-x86_64-3
/var/log/packages/man-pages-4.06-noarch-1

$ ls /mnt/chroot/var/log/packages/man*
/mnt/chroot/var/log/packages/man-db-2.9.0-x86_64-1
/mnt/chroot/var/log/packages/man-pages-5.04-noarch-1

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2722
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.5.3-ck1
Desktop: lxde
Località: Pisa
Contatta:

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da ponce »

non e' solo quello: la 14.2 non ha il supporto completo a UTF-8, e' stato implementato solo su current.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

In soldoni cosa significa che non ha il supporto completo?
C'è modo di sistemare la cosa almeno per quanto riguarda le pagine di manuale?


PS.
Qualcuno che usa slack-14.2 può verificare il comando "man slackpkg" e vedere se le accentate si vedono bene?

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2722
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.5.3-ck1
Desktop: lxde
Località: Pisa
Contatta:

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da ponce »

io proverei a cambiare terminale: mi sembra di ricordare che quando usavo la 14.2 con lxterminal vedevo tranquillamente le accentate...

c'e' anche stata una discussione precedente al riguardo qui
https://www.slacky.eu/forum/viewtopic.php?f=2&t=38744

EDIT: ti confermo che, sulla 14.2, esportando una variabile di ambiente, vedo le accentate nelle pagine man, su qualunque terminale (su xterm, dopo l'accentata mi ci mette uno spazio in piu')

Codice: Seleziona tutto

export GROFF_ENCODING='utf8'
su current non ce n'e' bisogno probabilmente perche' e' il default.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Confermo, in xterm viene aggiunto uno spazio, a me pare addirittura uno prima e un altro dopo la lettera accentata.
Nel terminale che uso di solito ("st" - simple tarminal) invece sembra tutto ok con la variabile d'ambiente GROFF_ENCODING definita ed esportata 'utf8'.

Dove conviene definire quella variabile in modo da averla settata così per tutti gli utenti?
Io ho creato uno script aggiuntivo in /etc/profile.d/groff.sh con all'interno l'export della variabile...

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2722
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.5.3-ck1
Desktop: lxde
Località: Pisa
Contatta:

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da ponce »

joe ha scritto:Dove conviene definire quella variabile in modo da averla settata così per tutti gli utenti?
Io ho creato uno script aggiuntivo in /etc/profile.d/groff.sh con all'interno l'export della variabile...
secondo me va bene cosi'.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Ok... sì, in Current ci deve essere qualche misterioso prodigio che rende leggermente meglio le accentate con gli spazi giusti ecc... Ad ogni modo ci si può accontentare già così (anche perché come sai l'intenzione è quella di passare in pianta stabile a Current).
Grazie per la dritta allora! Ciao! :thumbright:

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3173
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Pagine di manuale localizzate e unicode UTF8

Messaggio da joe »

Riprendo un attimo questo argomento perché ho notato che la definizione della variabile GROFF_ENCODING=utf8 non risolve il problema.
Non del tutto almeno. Parlo sempre solo della Slack 14.2 (sulla Current c'è man-db al posto di man e le pagine di manuale sono diverse, ad esempio man.1 è codificata in UTF8, mentre sulla stabile la stessa pagina è codificata in ISO_8859-1.

Facciamo un esempio:

Codice: Seleziona tutto

GROFF_ENCODING=ISO_8859-1 man man
Quel comando lì sopra in pratica dice a man:
«Guarda che la pagina del comando 'man' che stai per aprire è codificata in 'ISO_8859-1'»
Allora il buon man cerca e trova la pagina di man.1 in:

Codice: Seleziona tutto

/usr/man/it/man1/man.1.gz
A quel punto man va anche a vedere in /etc/man.conf e trova la riga (nel mio caso):

Codice: Seleziona tutto

TROFF           /usr/bin/groff -Tutf8 -k -mandoc
Che in pratica impartisce l'istruzione:
prendi la pagina e rendila in uscita codificata correttamente per essere rappresentata su un terminale impostato a UTF8.

Quindi di fatto man converte (attraverso preconv e groff) l'input codificato in ISO_8859-1 in una pagina in uscita con codifica UTF8.
E a quel punto la passa al terminale che la mostra correttamente dal momento che anche lui è impostato su UTF8.


Prova numero 2:

Codice: Seleziona tutto

GROFF_ENCODING=UTF-8 man man
Qui abbiamo diciamo a man una cosa sbagliata: perché gli suggeriamo di interpretare la pagina in inputo come se fosse codificata in UTF8, mentre in realtà non è così.
E infatti nel mio caso al posto delle accentate io vedo dei simboli stani con il punto interrogativo <?>, evidente indice del fatto che non riesce a capire cosa gli si è dato in input.

Se non si imposta GROFF_ENCODING, anche in quel caso si hanno problemi perché in pratica chiama preconv senza specificare encoding di input. Ma così facendo (dal manuale di preconv):

Codice: Seleziona tutto

preconv tries to find the input encoding with the following
       algorithm.

       1.     If the input encoding has been explicitly specified with
              option -e, use it.

       2.     Otherwise, check whether the input starts with a Byte Order
              Mark (BOM, see below).  If found, use it.

       3.     Otherwise, check whether there is a known coding tag (see
              below) in either the first or second input line.  If found,
              use it.

       4      Finally, if the uchardet library (an encoding detector library
              available on most major distributions) is available on the
              system, use it to try to detect the encoding of the file.

       5.     If everything fails, use a default encoding as given with
              option -D, by the current locale, or ‘latin1’ if the locale is
              set to ‘C’, ‘POSIX’, or empty (in that order).

       Note that the groff program supports a GROFF_ENCODING environment
       variable which is eventually expanded to option -k.
Ovvero se tutto fallisce mi sa tanto che nel mio caso GROFF_ENCODING venga impostato al "locale" corrente: LANG=it_IT.UTF-8. Dovrebbe tenere in conto solo UTF-8 nello specifico (ma allora mi chiedo perché prima con GROFF_ENCODING non impostato la manage di slackpkg che è codificata in UTF8 non si vedeva bene... boh...).

In sintesi il problema sembrerebbe proprio che man non sembra in grado di rilevare in modo automatico la codifica delle pagine di manuale che gli vengono date in pasto e che deve processare.
Si può forzare l'encoding dell'input a UTF8, ma poi quelle con codifica LATIN1 non si vedono bene (vedi esempio "man man").
Forse il punto 4 del manuale di preconv ovvero l'utlizzo di "libuchardet" potrebbe risolvere la fazzenda, ho dato un'occhiata e vedo che su SBo c'è.
Provo...
Se nel frattempo volete fare anche voi il test:

Codice: Seleziona tutto

GROFF_ENCODING=UTF8 man man

Codice: Seleziona tutto

GROFF_ENCODING=ISO_8859-1 man man

Codice: Seleziona tutto

GROFF_ENCODING= man man
Li vedete gli accenti?

Rispondi