[résolu]Unicode

K-lo
[résolu]Unicode

J'ai déjà discuter de l'unicode dans un autre sujet, qui n'avait rien a voir

Donc en tenant compte de tes remarques fredericmazue, je vais exposer mon problème (c'est à dire la localisation et le fait qu'on soit qu'en 16bits).

J'ai des codes Hexa dans un tableau d'int correspondant à de l'unicode (travail en binaire).

Sauf que j'aimerai pouvoir incrire/traduire ces codes dans un fichier sous forme de caractère UNICODE!

si je fais la méthode quelque peu "bourrin"
wstring ws= L"\u0034";
je peux facilement inscrire ce code dans un fichier.

sauf que j'ai que les codes et que passer par un wostringstrem ne me permet pas de faire la même chose :

wostringstream ows;

ows<<L"\u"<<codeHEXA; // codeHEXA étant un int

car le \u n'englobe pas codeHexa;

Comment puis-je écrire tout mes codes sous forme UNICODE dans un fichier?

fredericmazue

Quote:
ows<

car le \u n'englobe pas codeHexa;


Je ne suis pas sûr d'avoir bien capté la question, mais pourquoi tout simplement ne pas concaténer deux chaînes ?
D'abord tu transformes le nb HEXA en chaîne. Aucune difficulté et tu obtiens "HEXA"
Et après

string s = "\u" + "HEXA";
wstring ws= L(s.c_str());

Est-ce que ça correspond HEXActement à ton problème :)

K-lo

fredericmazue wrote:

Je ne suis pas sûr d'avoir bien capté la question, mais pourquoi tout simplement ne pas concaténer deux chaînes ?

Oui c'est bien le principe.

fredericmazue wrote:

D'abord tu transformes le nb HEXA en chaîne. Aucune difficulté et tu obtiens "HEXA"
Et après

string s = "\u" + "HEXA";
wstring ws= L(s.c_str());

Oula tu as trop fais de JAVA là :P : je suis obligé de passer pas un ostrinstream pour la concaténation car l'opérateur + n'est pas prévu pour ça, comme en JAVA (je crois...) ;) ou alors je viens d'apprendre quelque chose.

ostrinstream  _osrt;
//int codeEnHEXA;
_ostr<<"\\u"<<codeEnHEXA;
wstring ws = L(_ostr.str().c_str())

sinon la focntion L() mon compilateur ne l'accepte pas ( opérateur "L" non défini), c'est pas plutot la fonction _TCHAR ? Mais même là la conversion semble pas correcte : soit c'est un problème de type soit ça vient de moi...

fredericmazue

Quote:
Oula tu as trop fais de JAVA là

Hé m'insultes pas hein :lol:
Quote:
je suis obligé de passer pas un ostrinstream pour la concaténation car l'opérateur + n'est pas prévu pour ça, comme en JAVA

OUI/NON
Oui on ne peut pas additionner deux pointeurs comme ça.
J'ai juste voulu te décrire l'idée rapidemeent. ce en quoi j'ai eu tort manifestement :)

NON tu n'es pas obligé de passer par un ostringstream pour la concaténation (si on parle bien de la même chose). Concaténer est très simple

s = string("\u") + string("HEXA");

C'est évidemment ce que je voulais dire
Edit:

Quote:
la focntion L() mon compilateur ne l'accepte pas

Oui bien sûr. je voulais dire convertir string en wstring. Je ne voulais pas fournir du code clé en main C'est vrai que j'aurais pu m'exprimer autrement. Mais j'étais très pressé. J'ai eu tort de toutes façons :oops:.
J'aurais du attendre d'avoir un moment de calme.

Pour le reste on verra peut être tout à l'heure, je dois te laisser là.

fredericmazue

Bon me revoilà pour 5 minutes.

Reprenons à la base. Déjà

Quote:
wstring ws= L"\u0034";

Ca m'étonnerait que ça marche.
Alors on va partir sur L"\u0024";

Bon tu m'as enduit d'erreur avec tes chaînes là :twisted: :lol:

Il s'agit de manipuler des *caractères* unicode.
Donc je reviens à ce que je disais. Ta valeur HEXA tu peux facilement en faire une chaîne.
Mettons 0024 -> devient "0024"

Ensuite c'est comme ça (et cette fois c'est du "vrai" code" :) )

#include <cstdlib>

string s ="0024";
wchar_t wt;
mbtowc (&wt, s.c_str(), 1);

Et tu as ton caractère UNICODE
Car j'ai bien compris la question n'est-ce pas ? Tu as une valeur et tu veux en faire un caractère UNICODE, c'est bien ça ?

K-lo

fredericmazue wrote:
Quote:
Oula tu as trop fais de JAVA là

Hé m'insultes pas hein :lol:

Héhéhé :P :P

fredericmazue wrote:

OUI/NON
Oui on ne peut pas additionner deux pointeurs comme ça.
J'ai juste voulu te décrire l'idée rapidemeent. ce en quoi j'ai eu tort manifestement :)

Non non tu n'a pas eu tord mais je voulais te charier un peu avec JAVA :D

mbtowc (&wt, s.c_str(), 1);

Le problème avec cette fonction c'est que wt ne prend pas toute la valeur mais seulement le premier caractère soit '0' pour "0654"
Du coup la conversion ne se fait pas et je ne connais pas les fonctions de conversion :oops:

fredericmazue

Ah...
Je relis la question de départ et décidément, je me dis que je n'ai *RIEN* compris à la question.

Alors si j'ai compris cette fois, je me demande où est le problème ?
Tu dis avoir des valeurs en hexa qui correspondent à des caractères unicode. Ces valeurs sont dans des tableaux d'int dis tu.
Je prends une seule valeur pour simplifier.
Est-ce bien ça que tu as:

int nb = 0x0034;

Si oui, où est le problème ?

wchar_t wt = (wchar_t)nb;

Qu'est-ce qui ne va pas là ?

K-lo

:oops:
Donc ça fonctionne
Concaténer un int en un wchar_t je dois avouer que ça ne m'étais même pas passé par la tête :oops:

En fait il n'y avait pas de problème

Dsl pour le dérangement

fredericmazue

Quote:
Concaténer

Pas concaténer. Caster ou transtyper, comme tu voudras.
Ne nous enduis pas encore d'erreur :!: :lol:

Quote:
je dois avouer que ça ne m'étais même pas passé par la tête

Ben tu sais, c'est arrivé à de nombreux autres de ne pas penser de suite à la solution simple :)
Tu as vu ce que j'ai moi même déliré quand j'ai lu ta question :oops: :lol:

Quote:
En fait il n'y avait pas de problème

:D
Quote:
Dsl pour le dérangement

Ne sois pas désolé. Ca a été un plaisir.
Tu es le bienvenu sur ce forum, autant que tu voudras :)

Bon week end