J'ai besoin de convertir un groupe d'octets dans ISO-2022-JP et ISO-2022-JP-2 (et d'autres variations de ISO-2022) en Unicode. J'essaie d'utiliser ICU (link text), mais le code suivant ne fonctionne pas.Chaîne de codage C++ vers Unicode - bibliothèque ICU
std::string input = "\x1B\x28\x4A" "ABC\xA6\xA7"; //the first 3 chars are escape sequence to use JIS_X201 character set in GL/GR
UErrorCode status = U_ZERO_ERROR;
UConverter *conv;
// set up the converter
conv = ucnv_open("ISO-2022-JP", &status);
if (status != U_ZERO_ERROR) return false; //couldn't find character set
UChar * convDest = new UChar[2*input.length()]; //ucnv_toUChars will use up to 2*length
// convert to Unicode
int resultLen = (int)ucnv_toUChars(conv, convDest, 2*input.length(), input.c_str(), input.length(), &status);
Cela ne fonctionne pas. Le résultat contient '?' charcters pour tout ce que je mets dans ce qui était au-dessus ASCII. Le statut n'a aucune erreur. Qu'est-ce que je fais mal? En plus de cela, j'avais des difficultés à compiler la bibliothèque 4.4 car le projet MSVC 9 ne serait pas converti en projet MSVC 10.
Je connais également la librairie open source libiconv. Je ne pouvais pas compiler celui-là sur Windows. Si quelqu'un a des conseils sur une bibliothèque différente, c'est aussi la bienvenue.
Merci.
EDIT La séquence d'échappement que j'ai utilisée à l'origine était erronée. Alors maintenant ICU prend la chaîne, supprime la séquence d'échappement - ce qui est un pas dans la bonne direction. Mais le résultat contient toujours '?' caractères. La raison pour laquelle je n'ai pas pu convertir en projet MSVC 10 était que la plate-forme x64 n'était pas installée (ce n'est pas le cas par défaut). Sinon, je pourrais ouvrir tous les projets dans l'éditeur de texte et supprimer toute mention de cible x64.
Très intéressant. Avez-vous essayé de convertir de 2022 à Unicode en utilisant Java (non ICU)? –
J'ai essayé: Charset iso2022JP = Charset.forName ("ISO-2022-JP"); Résultat CharBuffer = iso2022JP.decode (ByteBuffer.wrap (octets)); où le jeu de caractères était sun.nio.cs.ext.ISO2022_JP et les résultats sont identiques à ceux d'ICU. Il ne s'agit pas fondamentalement de cartographier les caractères au-dessus de 128. – Budric
Budric pourriez-vous déposer un bug sur ICU à http://bugs.icu-project.org/trac/newticket et mentionner ces résultats? Vraiment étrange que ni l'un ni l'autre ne supporte cela dans l'encodage. –