Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

caractere -iso10646 et iso8859

8 réponses
Avatar
MacMac
bonjour,
je développe un logiciel en c sur X11 et j'ai un problème avec les
caractères codés .
j'utilise la police de caractère
"-adobe-helvetica-*-r-*--*-*-*-*-*-82-iso8859-*" ca marche bien pour
les caractères ascii mais je veux afficher des caractères spéciaux ( en
particulier l'ohm) je change donc iso8859 par iso10646 (xfontsel me dis
que c'est possible et que cette police existe) , je voudrais savoir
comment coder un caractère qui n'est pas ASCII ( par exemple l'ohm vaut
2126)
Ce qui est bizarre c'est que si je mes un caractères > 128 , je devrait
taper dans les caractères spéciaux mais en fait , j'affiche les
caractères données dans le tableau iso8859 ?

8 réponses

Avatar
Antoine Leca
En news:, MacMac va escriure:
savoir comment coder un caractère qui n'est pas ASCII


En UTF-8 ou en UTF-16 (en fait UCS-2), selon ton environnement et la
nécessité, ou pas, de communiquer avec des chaînes ASCII sans conversion).


( par exemple l'ohm vaut 2126)


char16_t ohmUtf16 = 0x2126; /* ou unsigned short, ou wchar_t */
char ohmUtf8[] = "xE2x84xA6";

(ou mieux
char ohmUtf8[] = "xCExA9";
mais ce n'est ni le sujet ni le lieu).


Par programme :

/*lors de l'initialisation du programme*/
setlocale(LC_ALL, "ce qui faut pour utiliser utf8");

/* ... */

{
char cUtf8[MB_LEN_MAX+1] = {0};
int longC;

longC = wctomb(cUtf8, 0x2126);
if( longC>=0 ) cUtf8[longC]=0; else longjmp(reset);
/* ... */


Ce qui est bizarre c'est que si je mes un caractères > 128 , je
devrait taper dans les caractères spéciaux mais en fait , j'affiche
les caractères données dans le tableau iso8859 ?


Comme quoi tu n'as probablement pas un problème d'encodage des caractères,
mais bien plutôt un problème de visualisation.

Un petit extrait fonctionnel du programme (qui nous dira à quel niveau de
X11 tu tapes) ?
Les variables d'environnement LC* (et LANG) ?
Le XLFD (avec ce qui *suit* iso10646...) ?


Antoine

Avatar
MacMac
Le Mon, 18 Feb 2008 16:47:33 +0100, Antoine Leca a écrit :

En news:, MacMac va escriure:
savoir comment coder un caractère qui n'est pas ASCII


En UTF-8 ou en UTF-16 (en fait UCS-2), selon ton environnement et la
nécessité, ou pas, de communiquer avec des chaînes ASCII sans
conversion).


( par exemple l'ohm vaut 2126)


char16_t ohmUtf16 = 0x2126; /* ou unsigned short, ou wchar_t */ char
ohmUtf8[] = "xE2x84xA6";

(ou mieux
char ohmUtf8[] = "xCExA9";
mais ce n'est ni le sujet ni le lieu).


Par programme :

/*lors de l'initialisation du programme*/
setlocale(LC_ALL, "ce qui faut pour utiliser utf8");

/* ... */

{
char cUtf8[MB_LEN_MAX+1] = {0};
int longC;

longC = wctomb(cUtf8, 0x2126);
if( longC>=0 ) cUtf8[longC]=0; else longjmp(reset);
/* ... */


Ce qui est bizarre c'est que si je mes un caractères > 128 , je devrait
taper dans les caractères spéciaux mais en fait , j'affiche les
caractères données dans le tableau iso8859 ?


Comme quoi tu n'as probablement pas un problème d'encodage des
caractères, mais bien plutôt un problème de visualisation.

Un petit extrait fonctionnel du programme (qui nous dira à quel niveau de
X11 tu tapes) ?


J'utilise XSetFont et XDrawString de base

char Message[]="ohm";
XSetFont (display, gcourant, "-adobe-helvetica-*-r-*--*-*-*-*-*-82-iso8859-*");
XDrawString (display, win, gcourant, CursY, CursY,Message, strlen (Message)); //sans fond

Les variables d'environnement LC* (et LANG) ? Le XLFD (avec ce qui *suit*
iso10646...) ?


les variables LC et XLFD sont vides LANG vaut fr_FR.UTF-8




Antoine



Avatar
MacMac
a priori j'ai rien sur LC_ALL
Avatar
Cyrille Lefevre

Les variables d'environnement LC* (et LANG) ? Le XLFD (avec ce qui *su it*
iso10646...) ?


les variables LC et XLFD sont vides LANG vaut fr_FR.UTF-8



Hi, Bonjour,

priorités : $LANG > $LC_ALL > $LC_* ($LC_CTYPE, etc.)

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.


Avatar
Cyrille Lefevre

Les variables d'environnement LC* (et LANG) ? Le XLFD (avec ce qui *su it*
iso10646...) ?


les variables LC et XLFD sont vides LANG vaut fr_FR.UTF-8



Hi, Bonjour,

priorités : $LANG > $LC_ALL > $LC_* ($LC_CTYPE, etc.)

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.


Avatar
Cyrille Lefevre

Ce qui est bizarre c'est que si je mes un caractères > 128 , je devra it
taper dans les caractères spéciaux mais en fait , j'affiche les
caractères données dans le tableau iso8859 ?



Hi, Bonjour,

a priori, tu ne peux utiliser qu'un jeux de caractères à la fois.
si tu es en iso8859-1, tu est limité à ce jeu de caractères.
si tu en veux plus, il te faut passer en utf8 qui balaye plus large.
et là, tout dépend de l'OS, des bibliothèques, etc.

man locale

"locale -a" pour voir les locales supportées par ton système pour peu
qu'il supporte cette commande

à ce propos, sous quel OS es-tu ?

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.

Avatar
Vincent Lefevre
In fr.comp.lang.c, article ,
Cyrille Lefevre <cyrille.lefevre-news% wrote:

priorités : $LANG > $LC_ALL > $LC_* ($LC_CTYPE, etc.)


LANG (extension POSIX) est moins prioritaire que les LC_*.

http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html#tag_08_02

[fu2 fr.comp.os.unix uniquement]

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
MacMac
Merci des réponses ,
Je vais donc aller voir dans setlocal

Le Mon, 18 Feb 2008 15:53:52 +0100, MacMac a écrit :

bonjour,
je développe un logiciel en c sur X11 et j'ai un problème avec les
caractères codés .
j'utilise la police de caractère
"-adobe-helvetica-*-r-*--*-*-*-*-*-82-iso8859-*" ca marche bien pour les
caractères ascii mais je veux afficher des caractères spéciaux ( en
particulier l'ohm) je change donc iso8859 par iso10646 (xfontsel me dis
que c'est possible et que cette police existe) , je voudrais savoir
comment coder un caractère qui n'est pas ASCII ( par exemple l'ohm vaut
2126)
Ce qui est bizarre c'est que si je mes un caractères > 128 , je devrait
taper dans les caractères spéciaux mais en fait , j'affiche les
caractères données dans le tableau iso8859 ?