# [Système] Man et UTF-8 (~ résolu)

## _kal_

Bonjour,

J'ai un problème avec l'affiche des pages man françaises. En effet, les caractères accentués ont du mal à s'afficher. Je suis en full UTF-8 et voici la conf de mes fichiers :

/etc/conf.d/consolefont 

```

CONSOLEFONT="lat9w-16"

CONSOLETRANSLATION="8859-15_to_uni"

```

/etc/conf.d/keymaps

```
KEYMAP="fr-latin9"

DUMPKEYS_CHARSET="iso-8859-15"
```

/etc/rc.conf

```
UNICODE="yes"

```

Si dans /etc/man.conf je met la ligne : 

```
NROFF           /usr/bin/nroff -Tlatin1 -mandoc -c

```

Alors, la sortie du man ressemble à ceci :

http://img156.imageshack.us/my.php?image=200703101645521085x724swk3.png

En revanche, si dans /etc/man.conf je met la ligne : 

```
NROFF           /usr/bin/nroff -mandoc -c

```

Alors, la sortie du man ressemble à ceci :

http://img265.imageshack.us/my.php?image=200703101648411085x724ssx9.png

Par conséquent, l'option -Tlatin1 permet l'affichage de certains caractères accentués, mais pas tous (comme le 'à'). Quelqu'un a une idée de ce qui ne va pas ?

Merci d'avance  :Wink: Last edited by _kal_ on Sat Mar 10, 2007 6:02 pm; edited 2 times in total

----------

## Temet

Salut, y a eu un topic la dessus y a plusieurs mois, si tu le trouves t'as la solution  :Wink: 

----------

## _kal_

J'ai trouvé un thread qui propose l'utilisation de groff-utf8 : 

https://forums.gentoo.org/viewtopic-t-430529-highlight-groffutf8.html

Par ailleurs, si la page de man qu'on veut consulter est réellement encodé en UTF8, comme la page de man de nano, alors ca fait l'effet inverse : plus aucun caractère accentués! J'vais enlevé les pages FR en attendant que ce bug soit réglé. C'est bizarre, car sous ubuntu y'a pas ce probleme et ils n'ont pas l'air d'utiliser groff-utf8.

EDIT: Pour ubuntu, ils ont eu l'idée de réencoder toute leurs pages de man en UTF-8 apparemment, puisque leur système est full UTF-8. Peut être faudrait il ajouter un useflag unicode au paquet sys-apps/man-pages dont l'objectif serait de convertir toutes les pages de man en utf8.

KalLast edited by _kal_ on Sat Mar 10, 2007 4:42 pm; edited 2 times in total

----------

## nemo13

 *_kal_ wrote:*   

> J'ai trouvé un thread qui propose l'utilisation de groff-utf8 : 
> 
> https://forums.gentoo.org/viewtopic-t-430529-highlight-groffutf8.html
> 
> Par ailleurs, si la page de man qu'on veut consulter est réellement encodé en UTF8, comme la page de man de nano, alors ca fait l'effet inverse : plus aucun caractère accentués! J'vais enlevé les pages FR en attendant que ce bug soit réglé. C'est bizarre, car sous ubuntu y'a pas ce probleme et ils n'ont pas l'air d'utiliser groff-utf8.
> ...

 

bonjour,

c'est sympa pour mon post-count

Bon week   :Laughing: 

----------

## _kal_

Bon voila, j'ai partiellement résolu le problème en me créant un ebuild qui converti toutes les pages de man en iso-8859-15. Ainsi, j'ai juste besoin d'avoir dans mon man.conf : 

```

NROFF           /usr/bin/nroff -c -mandoc

```

Apres avoir analysé le man de fgets pour ubuntu, je me suis aperçu qu'il était encodé en 8859-15 donc j'ai fait pareil pour toutes mes pages et ça marche  :Smile: 

Voici l'ebuild si ca peux en interesser quelques-uns. A savoir que j'en profite pour prendre la derniere version 2.39.0, bien plus à jour que celle de portage.

man-pages-fr-2.39.0.ebuild

```

# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/app-i18n/man-pages-fr/man-pages-fr-2.39.0.ebuild,v 1.3 2006/06/21 17:25:19 vapier Exp $

MY_P=${P}

DESCRIPTION="A somewhat comprehensive collection of french Linux man pages"

HOMEPAGE="http://fr.tldp.org/manfr.php"

SRC_URI="ftp://ftp.win.tue.nl/pub/linux-local/manpages/translations/${P}.tar.bz2"

LICENSE="freedist"

SLOT="0"

KEYWORDS="alpha amd64 arm hppa ia64 m68k mips ppc ppc64 s390 sh sparc x86"

IUSE=""

RDEPEND="virtual/man"

S=${WORKDIR}/${MY_P}

src_unpack() {

        unpack ${A}

        echo "\$S = $S"

        echo "\$P = $P"

        echo "\$MY_P = ${MY_P}"

        cd "${S}"

}

src_compile() { :; }

src_install() {

        for x in man? ; do

                for i in $(ls $x/) ; do

                        iconv -t iso-8859-15 $x/$i -c -s> $x/$i-latin9

                        if [ $? -ne 0 ] ; then echo problem with $x/$i ; fi

                        mv $x/$i-latin9 $x/$i

                done

                insinto /usr/share/man/fr/${x}

                doins ${x}/* || die "doins ${x}"

        done

}

```

----------

## El_Goretto

Waaaah, tant de violence technique pour ce Week End!  :Smile: 

Donc nemo13, si j'ai bien compris, ton script est un "wrapper" pour la commande man?

Comme j'ai eu la flemme de m'y pencher plus loin quand j'ai vu que groff-utf8 ne résolvait rien du tout, est-ce que quelqu'un a trouvé quelque chose pour la piste d'un script d'automatisation du réencodage des man fr?

----------

## _kal_

 *El_Goretto wrote:*   

> Waaaah, tant de violence technique pour ce Week End! 
> 
> Donc nemo13, si j'ai bien compris, ton script est un "wrapper" pour la commande man?
> 
> Comme j'ai eu la flemme de m'y pencher plus loin quand j'ai vu que groff-utf8 ne résolvait rien du tout, est-ce que quelqu'un a trouvé quelque chose pour la piste d'un script d'automatisation du réencodage des man fr?

 

Je pourrai faire un script et ne réencoder que les pages qui sont en UTF-8, puisque groff ne supporte pas celles-ci. Par ailleurs, je ne sais pas comment détecter l'encodage d'un fichier man :

```

kal@kal-desktop ~ $ file gets.3

gets.3: troff or preprocessor input text

```

La commande file indique l'encodage du fichier que pour les fichiers texte "réel". Si quelqu'un a une astuce sur ce sujet...

EDIT : arf...

```
kal@kal-desktop ~ $ file gets.3 -i

gets.3: text/troff; charset=iso-8859-1

```

Le pire c'est que je viens me faire ch*** a installer les man pages. Tout ca pour les consulter en dernier recours  :Laughing: 

----------

## _kal_

Il existe deux types d'encodage dans les man-pages-fr : 

- utf-8

- us-ascii

Pour chacun des deux, l'affichage sur le terminal avec nroff est erroné. Je précise l'utilisation de nroff ainsi :

```

NROFF           /usr/bin/nroff -c -mandoc

```

Par conséquent, je suis obligé de convertir toutes les pages en latin9 pour que ce soit OK. J'vais essayer de mettre un USEFLAG pour ce comportement.

----------

## _kal_

Voici l'ebuild avec le USEFLAG :

man-pages-fr-2.39.0.ebuild

```
# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/app-i18n/man-pages-fr/man-pages-fr-2.39.0.ebuild,v 1.3 2006/06/21 17:25:19 vapier Exp $

MY_P=${P}

DESCRIPTION="A somewhat comprehensive collection of french Linux man pages"

HOMEPAGE="http://fr.tldp.org/manfr.php"

SRC_URI="ftp://ftp.win.tue.nl/pub/linux-local/manpages/translations/${P}.tar.bz2"

LICENSE="freedist"

SLOT="0"

KEYWORDS="alpha amd64 arm hppa ia64 m68k mips ppc ppc64 s390 sh sparc x86"

IUSE="latin1"

RDEPEND="virtual/man"

S=${WORKDIR}/${MY_P}

src_unpack() {

        unpack ${A}

        echo "\$S = $S"

        echo "\$P = $P"

        echo "\$MY_P = ${MY_P}"

        cd "${S}"

}

src_compile() { :; }

src_install() {

        if use latin1 ; then

                for i in man*/* ; do

                        iconv -t iso-8859-15 $i -c -s > $i-latin9

                        if [ $? -ne 0 ] ; then echo problem with $i ; fi

                        mv $i-latin9 $i

                done 

        fi

        for x in man? ; do

                        insinto /usr/share/man/fr/${x}

                doins ${x}/* || die "doins ${x}"

        done

}

```

----------

## nemo13

 *El_Goretto wrote:*   

> Donc nemo13, si j'ai bien compris, ton script est un "wrapper" pour la commande man?

 

yo , j'ai les chevilles qui gonflent   :Embarassed: 

j'ai bien envie de me faire rebatiser   :Laughing:  Wrapper_Man_fr  :Laughing: 

 *Kal wrote:*   

> La commande file indique l'encodage du fichier que pour les fichiers texte "réel". Si quelqu'un a une astuce sur ce sujet... 

 

dans ma bidouille j'utilise 

```
file -iz
```

si cela peut te servir ?

 *Quote:*   

>  file -iz /usr/share/man/fr/man1/man.1.gz
> 
> /usr/share/man/fr/man1/man.1.gz: text/troff; charset=iso-8859-1 (application/x-gzip)

 

----------

## Temet

A ma grande surprise _kal_, je suis le seul (ou j'espère le premier) à te remercier pour ton ebuild.

Malgré les diverses bidouilles sur nroff, j'avais toujours certains man rebels (mplayer).

Tout marche nickel, merci beaucoup  :Wink: 

----------

## _kal_

 *Temet wrote:*   

> A ma grande surprise _kal_, je suis le seul (ou j'espère le premier) à te remercier pour ton ebuild.
> 
> Malgré les diverses bidouilles sur nroff, j'avais toujours certains man rebels (mplayer).
> 
> Tout marche nickel, merci beaucoup 

 

Héhé y'a pas de quoi  :Wink: 

Si quelqu'un pense utile de le mettre sur bugzilla, je le ferai. Mais bon je suis pas expert en ebuild, et il y a surement quelques trucs à perfectionner.

----------

## julroy67

AH merci, enfin des man pages correctes, étant donné que j'étais sur Kubuntu et que là-bas sa marchait, je me disais que c'était une mauvaise configuration de moi sur Gentoo. Mais non. ^^

Sa pourrait être utile de mettre sur Bugzilla, c'est quand même chiant ces accents qui marchent pas toujours.   :Confused: 

----------

## bi3l

Merci pour ton ebuild, _kal_ (il faudrait ajouter libiconv dans les dépendances). Ca pourrait aussi être pas mal de patcher /usr/lib/portage/doman pour que toutes les pages de man soient converties en iso-8859-15 à l'installation.

----------

## El_Goretto

Merci pour l'ebuild, je la teste dès que j'ai un peu de temps  :Smile: 

----------

## _kal_

 *bi3l wrote:*   

> Merci pour ton ebuild, _kal_ (il faudrait ajouter libiconv dans les dépendances). Ca pourrait aussi être pas mal de patcher /usr/lib/portage/doman pour que toutes les pages de man soient converties en iso-8859-15 à l'installation.

 

En effet, je pourrai modifie l'ebuild pour ajouter une dépendance de libiconv en fonction du useflag. Par ailleurs, patcher /usr/lib/portage/doman rendrai mon ebuild inutile, et patcherai des pages de man qui n'ont pas lieu d'etre (les US).

----------

## Temet

Finalement, ça ne marche pas pour moi.

Ca m'a résolu le man de mplayer, mais un "man cp" merde... t'ain c'est dingue d'avoir des merdes sur un truc aussi con que les pages de man, y a un truc qui tourne pas rond là o_O"

----------

## _kal_

 *Temet wrote:*   

> Finalement, ça ne marche pas pour moi.
> 
> Ca m'a résolu le man de mplayer, mais un "man cp" merde... t'ain c'est dingue d'avoir des merdes sur un truc aussi con que les pages de man, y a un truc qui tourne pas rond là o_O"

 

Heu c'est bizarre, le man de cp est nikel chez moi.

```
kal@kal-desktop ~ $ grep -i /bin/nroff /etc/man.conf 

NROFF           /usr/bin/nroff -mandoc -c

```

Regarde si tu as bien ça  :Smile: 

Sinon c'est que t'as pas installé mon ebuild ou que t'a conservé les anciens man je sais pas...

----------

## nemo13

 *Temet wrote:*   

> Finalement, ça ne marche pas pour moi.
> 
> Ca m'a résolu le man de mplayer, mais un "man cp" merde... t'ain c'est dingue d'avoir des merdes sur un truc aussi con que les pages de man, y a un truc qui tourne pas rond là o_O"

 

```
llfm cp

/usr/share/man/fr/man1/cp.1.gz: text/troff; charset=utf-8 (application/x-gzip)
```

cp est codé en utf8

groff de base ne sait pas le traiter

grff-utf8 oui mais dans ce cas ,c'est d'autres pages qui merdoient

voili-voila.

----------

## _kal_

Oui mais normalement mon ebuild contient le man de cp et le convertit donc en 8859-15. Essai de voir si t'as deux man de cp en faisait :

```
man -aw cp
```

Si oui, tu peux tous les visualiser grace à

```
man -a cp
```

Il suffit de tapper 'q' pour passer au man suivant  :Smile: 

----------

## Temet

Mon système est en iso hein, pas en utf8.

Et non, j'ai n'ai qu'un man de cp en Français, et il ne passe pas.

```
temet@gentoo ~ $ grep -i /bin/nroff /etc/man.conf

#NROFF          /usr/bin/nroff -Tascii -c -mandoc

NROFF           /usr/bin/nroff -c -mandoc

#NROFF          /usr/bin/iconv -f utf8 -t iso8859-15 | /usr/bin/nroff -mandoc
```

----------

## _kal_

 *Temet wrote:*   

> Mon système est en iso hein, pas en utf8.
> 
> Et non, j'ai n'ai qu'un man de cp en Français, et il ne passe pas.
> 
> ```
> ...

 

Ah bah si tu es en iso, c'est normal. Cet ebuild est fait pour corriger les problemes de pages man lorsque le système est en UTf-8. Peut etre qu'il faut que tu ajoutes l'option -Tlatin1 à ton nroff... Je sais pas trop  :Wink: 

----------

## Temet

Déjà essayé avec le -Tlatin1, ça ne fait rien.

----------

## _kal_

 *Temet wrote:*   

> Déjà essayé avec le -Tlatin1, ça ne fait rien.

 

C'est incroyable, meme lorsque le système est en iso il y a des problemes avec ces pages de man! J'ai testé sur une Fedora 4 à la fac ce matin, et il n'y pas ce problème non plus. Il faudrai en effet modifier l'utilitaire doman de portage afin de tout convertir en iso-8859-15.

----------

## swilmet

Merci pour l'ebuild  :Smile: 

Mais est-ce normal que la page man de bash ne soit pas disponible en français ?

```
seb@localhost ~ $ man -aw bash

/usr/share/man/man1/bash.1.bz2
```

Je suppose que c'est la version 2.39 qui y est pour quelque chose, donc comment adapter ton ebuild pour que ce soit la version 1.64 qui soit installé (celle proposée par portage) ?

J'ai aussi essayé de faire un script (en reprenant le code de ton ebuild) pour convertir les pages man en latin9 (quand c'est l'ebuild 1.64 qui est installé) :

```
#!/bin/sh

for i in /usr/share/man/fr/man*/* ; do

        iconv -t iso-8859-15 $i -c -s > $i-latin9

        if [ $? -ne 0 ] ; then echo problem with $i ; fi

        mv $i-latin9 $i

done

```

Mais j'obtiens des erreurs :

```
[...]

problem with /usr/share/man/fr/man3/asinl.3.bz2

problem with /usr/share/man/fr/man3/asprintf.3.bz2

problem with /usr/share/man/fr/man3/assert.3.bz2

iconv: Caractère ou séquence de changement incomplet à la fin du tampon

problem with /usr/share/man/fr/man3/assert_perror.3.bz2

problem with /usr/share/man/fr/man3/atan2.3.bz2

problem with /usr/share/man/fr/man3/atan2f.3.bz2

problem with /usr/share/man/fr/man3/atan2l.3.bz2

problem with /usr/share/man/fr/man3/atan.3.bz2

problem with /usr/share/man/fr/man3/atanf.3.bz2

iconv: Caractère ou séquence de changement incomplet à la fin du tampon

problem with /usr/share/man/fr/man3/atanh.3.bz2

problem with /usr/share/man/fr/man3/atanhf.3.bz2

[...]

```

Voilà

----------

## GentooUser@Clubic

Moi mon système est en UTF-8 et j'ai opté pour une approche différente !

D'abord j'ai installé groff-utf8 puis j'ai fait ce script

```
#!/bin/bash

IFS=" "

data=$(cat)

enc=$(expr match "$(echo "$data" | file - -i)" '.*charset=\(\S*\)')

if [ $(expr match "$enc" 'us-ascii\|utf-8') -eq 0 ] ; then

        echo "$data" | iconv -c -s -f "$enc" -t "UTF-8"

else

        echo "$data"

fi

unset  IFS

```

Il converti à la volée en utf-8 toutes les pages de manuel qui ne sont pas en us-ascii ou utf-8.

Après j'ai modifié mon /etc/man.conf comme ça

```
NROFF /usr/local/bin/man2utf8 | /usr/bin/groff-utf8 -Tutf8 -c -mandoc
```

/usr/local/bin/man2utf8 est l'emplacement de mon script.

Avantages:

Ça marche pour toutes les langues francais, russe, japonais... la détection de l'encodage sur le stream par file est excellente !

Rien à recompiler.

Inconvenient:

C'est un peu lent avec les grosses pages man, comptez 3 secondes pour afficher man mplayer sur un p4-2200mhz

J'ai essayé de voir au niveau de doman pour tout convertir en utf-8 de façon définitive, mais j'ai l'impression qu'il n'est pas utilisé par tous les ebuilds !

Et puis ça nécessiterais un emerge -e world :'DLast edited by GentooUser@Clubic on Thu Mar 15, 2007 4:38 pm; edited 1 time in total

----------

## _kal_

 *darkagonik wrote:*   

> Merci pour l'ebuild 
> 
> Mais est-ce normal que la page man de bash ne soit pas disponible en français ?
> 
> ```
> ...

 

C'est normal, tu essai d'appliquer iconv sur des fichiers compressé en bzip2. Essai ce script :

```
#!/bin/bash

declare -x is_bzip2=0

declare -x is_gzip=0

retour=0

for i in /usr/share/man/fr/man*/* ; do

    if [[ "$i" =~ '.*bz2$' ]] ; then

        is_bzip2=1

        is_gzip=0

        bunzip2 "$i"

        retour=$?

    elif [[ "$i" =~ '.*gz$' ]] ; then

        is_gzip=1

        is_bzip2=O

        gunzip "$i"

        retour=$?

    else

        # ce n'est pas une archive

        continue

    fi

    # si on a tenté de decompresser un lien symbolique

    if [ "$retour" != "0" ] ; then

        continue

    fi

    

    man=$(echo $i | sed -re 's/\.bz2|\.gz//g')

    # si c deja en iso-8859-15 alors on saute

    codage=$(file $man -ir | cut -d ';' -f2 | cut -d'=' -f2)

    if [ "$codage" != "iso*" ] ; then

        if [ $is_bzip2 -eq 1 ] ; then

            bzip2 $man

        else

            gzip $man

        fi

        continue

    fi

    iconv -t iso-8859-15 $man -c > $man-latin9

    if [ $? -ne 0 ] ; then echo problem with $man ; fi

    mv $man-latin9 $man

    if [ $is_bzip2 -eq 1 ] ; then

        bzip2 $man

    else

        gzip $man

    fi

done

```

----------

## swilmet

 *_kal_ wrote:*   

> 
> 
> C'est normal, tu essai d'appliquer iconv sur des fichiers compressé en bzip2. Essai ce script :
> 
> 

 

J'ai essayé ton script, mais ça n'a pas marché, les accents ne s'affichaient toujours pas correctement.

Alors j'ai modifié ton ebuild pour que ce soit les pages en version 1.64 qui s'installent (sur ftp://ftp.win.tue.nl/pub/linux-local/manpages/translations/ il y a aussi la 1.69 mais qui ne contient pas bash). Je ne sais pas si c'est vraiment correct ce que je fais, mais au moins ça marche !   :Smile:  (j'ai rajouté des commentaires dans le code pour montrer les changements) :

man-pages-fr-1.64.0.ebuild

```
# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/app-i18n/man-pages-fr/man-pages-fr-1.64.0.ebuild,v 1.3 2006/06/21 17:25:19 vapier Exp $

# MY_P=${P} ne marche pas, donc j'ai repris la ligne de l'ebuild officiel

MY_P=${P/-pages/}

DESCRIPTION="A somewhat comprehensive collection of french Linux man pages"

HOMEPAGE="http://fr.tldp.org/manfr.php"

#SRC_URI="ftp://ftp.win.tue.nl/pub/linux-local/manpages/translations/${P}.tar.bz2"

# surement pas correct, de toute façon il prend le fichier sur un miroir spécifié dans GENTOO_MIRRORS

# (DISTDIR=/mnt/distfiles chez moi)

SRC_URI="/mnt/distfiles/${P}.tar.bz2"

LICENSE="freedist"

SLOT="0"

KEYWORDS="alpha amd64 arm hppa ia64 m68k mips ppc ppc64 s390 sh sparc x86"

IUSE="latin1"

RDEPEND="virtual/man"

S=${WORKDIR}/${MY_P}

src_unpack() {

    unpack ${A}

    echo "\$S = $S"

    echo "\$P = $P"

    echo "\$MY_P = ${MY_P}"

    cd "${S}"

}

src_compile() { :; }

src_install() {

    if use latin1 ; then

        for i in man*/* ; do

            iconv -t iso-8859-15 $i -c -s > $i-latin9

            if [ $? -ne 0 ] ; then echo problem with $i ; fi

            mv $i-latin9 $i

        done

    fi

    for x in man? ; do

        insinto /usr/share/man/fr/${x}

        doins ${x}/* || die "doins ${x}"

    done

}

```

C'est du chipotage quoi  :Rolling Eyes: Last edited by swilmet on Thu Mar 15, 2007 10:02 pm; edited 1 time in total

----------

## _kal_

Héhé, c bizarre que ca n'ai pas marché mais bon passons, l'ebuild devrais résoudre ton problème  :Smile: 

----------

